共用方式為


編譯器警告 (層級 1) C4691

'type' :未參考元件 'file' 中預期的類型,而是在目前使用的轉譯單位中定義的類型

未參考包含原始類型定義的中繼資料檔案,而且編譯器會使用本機類型定義。

在重建 檔案 的情況下,可以使用 pragma 警告 來忽略或關閉 C4691。 也就是說,如果您要建置的檔案與編譯器預期尋找類型定義的檔案相同,您可以忽略 C4691。

不過,如果編譯器使用的定義不是來自中繼資料中參考的相同元件,就可能發生非預期的行為;CLR 型別不僅依型別的名稱,而且是由元件輸入。 也就是說,來自 assembly z.dll 的類型 Z 與元件 y.dll 的類型 Z 不同。

範例

此範例包含原始類型定義。

// C4691_a.cpp
// compile with: /clr /LD /W1
public ref class Original_Type {};

此範例會參考 C4691_a.dll,並宣告類型為 Original_Type 的欄位。

// C4691_b.cpp
// compile with: /clr /LD
#using "C4691_a.dll"
public ref class Client {
public:
   Original_Type^ ot;
};

下列範例會產生 C4691。 請注意,此範例包含 Original_Type 的定義,且未參考 C4691a.dll。

若要解析,請參考包含原始類型定義的中繼資料檔案,並移除本機宣告和定義。

// C4691_c.cpp
// compile with: /clr /LD /W1
// C4691 expected

// Uncomment the following line to resolve.
// #using "C4691_a.dll"
#using "C4691_b.dll"

// Delete the following line to resolve.
ref class Original_Type;

public ref class MyClass : Client {};