1

私は現在、メールアドレスのトップレベルドメインのチェッカーを行っています。確認するために、テキストファイルのリストと比較しています。リストを静的マップコンテナにインポートしたいと思います。ただし、インスタンス化しようとすると、現在のスコープでは定義できないと表示されます。何故ですか?

これは私のヘッダーファイルです:

    class TldPart {
    public:
        static void LoadTlds();
    private:
        static map<string,bool> Tld;
    }

cppでの実装は次のとおりです。

    void TldPart::LoadTlds()
    {
        map<string,bool> Tld;
        ...
    }

LoadTlds関数でValidTldを定義できないことを教えてくれます。

4

1 に答える 1

1

クラスの静的メンバーは、オブジェクトの外部に存在します。クラスの外部で静的メンバーを定義して初期化する必要があります。

ここでは、静的クラスメンバーを定義して初期化します。

ヘッダーファイル:

#pragma once

#include <map>
#include <string>

class TldPart {
public:
    static void LoadTlds();
private:
    static std::map<std::string, bool> tld;
};

あなたのcppファイル:

#include "external.h"

std::map<std::string,bool> TldPart::tld;

void TldPart::LoadTlds()
{
    tld.insert(std::make_pair("XX", true));
}

そして、クラスの最後にあるセミコロンを忘れないでください。

編集:const積分型の静的メンバー、またはconstexprsでリテラル型の静的メンバーのクラス内初期化子を提供できます。

于 2013-03-07T04:10:10.010 に答える