質問
g ++で再現される問題があります。 VC ++は問題を解決しません。 したがって、2つのcppファイルがあります。
1.cpp:
#include <string>
#include <iostream>
extern const std::string QWERTY;
int main()
{
std::cout << QWERTY.c_str() << std::endl;
}
2.cpp:
#include <string>
const std::string QWERTY("qwerty");
魔法ではありません。文字列定数を別のファイルに配置したいだけです。リンク時にldがエラーを生成します:&quot; undefined reference to `_QWERTY '&quot; 最初の考えは、両方の宣言を&quot; extern&quot; C&quot;&quot;にラップすることです。 -助けにならなかった。エラーが発生し、C ++以外の_QWERTYが残っています。
提案をお寄せいただきありがとうございます
解決
おそらくこの標準の一部に遭遇しているようです:
Cでは、ファイルのconst修飾オブジェクト 明示的なストレージのないスコープ クラス指定子には外部リンケージがあります。 C ++では、内部リンケージがあります。
この変更を2.cppに変更:
#include <string>
extern const std::string QWERTY("qwerty");
&quot; linkage&quot;の詳細については、この質問では- C ++の外部リンケージおよび内部リンケージとは。
他のヒント
検索する必要がありますが、C ++のconstグローバル変数には内部リンケージがあるため、 const
を使用しないでください。コンパイルできます。
1.cpp
...
extern std::string QWERTY;
...
2.cpp
#include <string>
std::string QWERTY("qwerty");
または、もちろん、共通ヘッダーでconst文字列として宣言/定義することもできます。
余分な extern
を2.cppに追加してもコンパイルできるようになりますが、それが標準であるかg ++の「追加」であるかどうかはわかりません
所属していません StackOverflow