1

重複の可能性:
const は、C では内部リンケージを意味しないのに、C++ では内部リンケージを意味するのはなぜですか?
C++の外部リンケージと内部リンケージとは

実行可能ファイルにコンパイルしようとしている 2 つの C ファイルがあります。1 つのファイルには、次のように宣言が 1 つだけ含まれています (簡略化されています)。

const char *foo[2] = {"thing1", "thing2"};

2番目のcファイルはこれを行います

extern const char *foo[2];
main()
{
 //Code that does stuff with foo
}

コンパイル時に、foo が未解決の外部シンボルであるというリンカ エラーが発生します。コンパイラが foo を最適化していると仮定しています。ここに何かアイデアはありますか?

4

1 に答える 1

4

あなたの宣言には何の問題もありません。intの戻り型としてexplicitを追加すると仮定すると、コードはそのままコンパイルおよびリンクする必要がありますmain。私が思いつくリンカーエラーの唯一の説明は、必要なすべてのオブジェクトファイルをリンカーに提供するのを忘れているということです。

constC ++ではオブジェクトに内部リンクがあるという事実を通じてこの問題を説明しようとする答えは、誤解を招き、無関係です。上記のオブジェクトfooはオブジェクトではありませんconst

于 2012-12-14T22:43:05.440 に答える