質問

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 ++の「追加」であるかどうかはわかりません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top