共用方式為


編譯器錯誤 C2065

更新:2007 年 11 月

錯誤訊息

'identifier' : 未宣告的識別項

變數的型別必須在被使用前先指定於宣告之中。函式所使用的參數則必須在被使用前先在宣告或原型 (Prototype) 中指定。

可能的原因:

  1. 您是使用 C 執行階段的偵錯版本進行編譯、在 for 迴圈中宣告 Standard C++ 程式庫 Iterator 變數,然後嘗試在 for 迴圈的範圍之外使用該 Iterator 變數。使用 C 執行階段的偵錯版本編譯 Standard C++ 程式庫程式碼會隱含 /Zc:forScope。如需詳細資訊,請參閱為 Iterator 支援偵錯

  2. 您可能呼叫了一個在目前建置環境無法支援的 SDK 標頭檔 (Header File) 裡的函式。

  3. 忽略了必要的包含檔,尤其是如果您定義了 VC_EXTRALEANWIN32_LEAN_AND_MEANWIN32_EXTRA_LEAN 的時候。這些符號排除了某些在 windows.h 和 afxv_w32.h 中的標頭檔以加快編譯速度 (尋找 windows.h 和 afxv_w32.h 中對排除項目的最新說明)。

  4. 識別項名稱拼錯了。

  5. 識別項使用了錯誤的大寫和小寫字母。

  6. 字串常數之後的右引號遺失。

  7. 不適當的命名空間範圍。例如,若要解析 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;
};