0

静的char配列を持つクラスがあります。配列のサイズはで与えられますargv

私はこのようなことをしたい:

class ABC {

public:
  static char *buffer;
  ABC(int size) {
    ABC::buffer = new char[size];
  }

}

// in other file:

ABC tempVar(atoi(argv[1]));

しかし、これはうまくいかないようです。次のようなエラーが発生します:

エラー2エラーLNK2001:未解決の外部シンボル "public:static char * ABC :: buffer"(?buffer @ ABC @@ 2PADA)gpslib.lib

どうすればこれを修正できますか?

4

1 に答える 1

5

一度だけ定義する必要がありますstatic buffer。宣言されているだけです。.cpp正確に1つのファイルに以下を追加します。

char* ABC::buffer;

のインスタンスABCが作成されるたびに、以前に割り当てられたbufferものが失われる(メモリリーク)ことに注意してください。これは、必要なものではありません。

より堅牢なソリューションにはbuffer、インスタンス(非静的)メンバーがあります。さらに堅牢なソリューションではstd::string、の代わりにを使用しchar*、動的メモリ割り当てを管理します。

于 2012-06-28T13:54:34.720 に答える