1

文字列とクラス ポインターを含むマップがあります。私はJAVAから来たので、私を導いてください。

class Client {

public:
    static map<string, Client*> CLIENTS;
    Client(string dir);
    static Client* get_client(string name);
    virtual ~Client();
};

私の get_client メソッドは

Client* Client::get_client(string name) {
       map<string, Client*>::iterator it = CLIENTS.find(name);
}

以下のエラーが表示されます

Undefined symbols for architecture x86_64:
  "Client::CLIENTS", referenced from:
      Client::get_client(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)in client.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
4

2 に答える 2

2

CLIENTS宣言しただけのものを定義する必要があります。の外側でclass Client{clients.cppファイルに追加します

 std::map<std::string, Client*> Client::CLIENTS;

ところで、名前CLIENTSがかなり紛らわしいと思います。多分それはあるべきですclient_dict

g++ -Wall -gLinuxなどで、デバッグ情報とすべての警告を含めてコンパイルすることを忘れないでください。警告が表示されなくなるまでコードを改善してください (警告が表示されますget_client)。また、デバッガーの使用方法を学びます ( gdbLinux など)。

于 2013-03-16T08:15:16.013 に答える
1

追加

map<string, Client*> Client::CLIENTS;

cppファイルに。std::また、 STL クラスの前のプレフィックスを省略しないでください。特にヘッダーに

于 2013-03-16T08:18:29.160 に答える