2012-04-26 70 views
2

エラーC2129:静的関数 'ボイドFUNC(int型、char型*')宣言されていますが、私はことを読んコンパイルの問題 - コードC2129

を定義していない:

静的関数は、ファイルの範囲内で定義する必要があります。関数が別のファイルで定義されている場合は、externとして宣言する必要があります。

ファイルスコープは、のC++または.h、または.hファイル内の?

答えて

6

C++コンパイラは.hファイルを参照しません。ファイルの内容は、プリプロセッサ自体によってcppファイルに配置されます。ここでファイルのスコープは、関数がcppファイル内にあることです。

+0

大丈夫です。乾杯。私が持っている問題は、util.hというファイルにstaticとして宣言されている関数があることです。右クリックしてGo To Definition(定義に移動)に行くと、.cppの定義に移ります。しかし、コンパイルすると、上記のエラーが発生します。両方のファイルは同じ場所にあり、追加のインクルードディレクトリのプロパティに追加しました。なぜこのようなことが起こっているのでしょうか? – discodowney

+0

エラーが発生したときに実際にコンパイルするファイルに注意する必要があります。 Util.cppをコンパイルし、その関数がUtil.cppで定義されている場合、そのエラーは発生しません。 – harper

+0

util.hから静的関数を削除する必要があります。静的関数は.cppファイル内にのみあり、その.cppファイルでのみ使用できます.2つの.cppファイルで必要な場合はexternにする必要があります – Mark

2

この関数が別のファイルで定義されている場合は、 externと宣言する必要があります。

この文では、「別のファイル」は「別のオブジェクトファイル」に変換され、最終的にはコンパイル後にリンクされます。 Naveenが答えたように、コンパイラは、関数が宣言されたソースファイルを実際には気にしません。