編譯器錯誤 C2065
更新:2007 年 11 月
錯誤訊息
'identifier' : 未宣告的識別項
變數的型別必須在被使用前先指定於宣告之中。函式所使用的參數則必須在被使用前先在宣告或原型 (Prototype) 中指定。
可能的原因:
您是使用 C 執行階段的偵錯版本進行編譯、在 for 迴圈中宣告 Standard C++ 程式庫 Iterator 變數,然後嘗試在 for 迴圈的範圍之外使用該 Iterator 變數。使用 C 執行階段的偵錯版本編譯 Standard C++ 程式庫程式碼會隱含 /Zc:forScope。如需詳細資訊,請參閱為 Iterator 支援偵錯。
您可能呼叫了一個在目前建置環境無法支援的 SDK 標頭檔 (Header File) 裡的函式。
忽略了必要的包含檔,尤其是如果您定義了 VC_EXTRALEAN、WIN32_LEAN_AND_MEAN 或 WIN32_EXTRA_LEAN 的時候。這些符號排除了某些在 windows.h 和 afxv_w32.h 中的標頭檔以加快編譯速度 (尋找 windows.h 和 afxv_w32.h 中對排除項目的最新說明)。
識別項名稱拼錯了。
識別項使用了錯誤的大寫和小寫字母。
字串常數之後的右引號遺失。
不適當的命名空間範圍。例如,若要解析 ANSI C++ 標準程式庫的函式和運算子,您必須使用 using 指示詞來指定 std 命名空間。下列範例將無法編譯成功,因為 using 指示詞被設成註解,而 cout 被定義於 std 命名空間內:
範例
下列範例會產生 C2065。
// C2065.cpp
// compile with: /EHsc
// using namespace std;
#include <iostream>
int main() {
cout << "Hello" << endl; // C2065
// try the following line instead
std::cout << "Hello" << std::endl;
}
呼叫泛型函式時,如果預期的型別引數不能從所使用的參數推算得出,編譯器就會報告錯誤。如需詳細資訊,請參閱Generic Functions。
下列範例會產生 C2065。
// C2065_b.cpp
// compile with: /clr
generic <typename ItemType>
void G(int i) {}
int main() {
// global generic function call
G<T>(10); // C2065
G<int>(10); // OK
}
對 Visual C++ 2005 的編譯器完成一致性處理後也可能會發生這個錯誤:Visual C++ 屬性的參數檢查。如需詳細資訊,請參閱 Visual C++ 2005 編譯器的重大變更。
下列範例會產生 C2065。
// C2065_c.cpp
// compile with: /c
[module(DLL, name=MyLibrary)]; // C2065
// try the following line instead
// [module(dll, name="MyLibrary")];
[export]
struct MyStruct {
int i;
};