11

次のように、API で文字列定数を提供したいと考えています。

extern const char* const SOME_CONSTANT;

しかし、静的ライブラリ ソース ファイルで次のように定義すると、

const char* const SOME_CONSTANT = "test";

そのライブラリに対してリンクし、SOME_CONSTANT を使用すると、リンカー エラーが発生します。

エラー 1 エラー LNK2001: 未解決の外部シンボル "char const * const SOME_CONSTANT" (?SOME_CONSTANT@@3QBDB)

extern const char* const宣言と定義の両方からポインター const-ness (2 番目の const キーワード) を削除すると、機能します。ポインター const-nessエクスポートするにはどうすればよいですか?

4

3 に答える 3

14

この問題はextern、定数を定義するソース ファイルで宣言が表示されないことが原因である可能性があります。次のように、定義の上に宣言を繰り返してみてください。

extern const char* const SOME_CONSTANT;  //make sure name has external linkage
const char* const SOME_CONSTANT = "test";  //define the constant
于 2013-02-20T10:10:45.287 に答える
9

ほとんどの場合、実装ファイルにヘッダーを含めるのを忘れていました

とにかく、キーワードexternを定義に追加します

宣言がなければ、extern内部リンケージがあるため、リンカには見えません

于 2013-02-20T10:11:12.907 に答える
0

受け入れられた回答の解決は、1 つのステップで実行できます。

extern定数の定義に指定子を追加できます。

extern const char* const SOME_CONSTANT = "test";
于 2022-01-03T20:22:09.467 に答える