建議使用 Visual Studio 2017

連結器工具警告 LNK4248

 

如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件

無法解析的 typeref 語彙基元 (token) 'type';影像可能無法執行

類型沒有定義 MSIL 中繼資料中。

向前宣告 MSIL 模組中的型別時,可能會發生 LNK4248 (編譯/clr)、 MSIL 模組參考型別,而且有類型定義的原生模組連結 MSIL 模組。

在此情況下,連結器會提供 MSIL 中繼資料中的原生型別定義,這可能會提供正確的行為。

不過,如果 CLR 型別轉送型別宣告,然後連結器的原生型別定義可能不正確

如需詳細資訊,請參閱 /clr (Common Language Runtime Compilation)

更正這個錯誤

  1. 提供 MSIL 模組中的類型定義。

下列範例會產生 LNK4248。 定義結構 A,解決問題。

// LNK4248.cpp  
// compile with: /clr /W1  
// LNK4248 expected  
struct A;  
void Test(A*){}  
  
int main() {  
   Test(0);  
}  

下列範例已轉送的型別定義。

// LNK4248_2.cpp  
// compile with: /clr /c  
class A;   // provide a definition for A here to resolve  
A * newA();  
int valueA(A * a);  
  
int main() {  
   A * a = newA();  
   return valueA(a);  
}  

下列範例會產生 LNK4248。

// LNK4248_3.cpp  
// compile with: /c  
// post-build command: link LNK4248_2.obj LNK4248_3.obj  
class A {  
public:   
   int b;  
};  
  
A* newA() {  
   return new A;  
}  
  
int valueA(A * a) {  
   return (int)a;  
}  

顯示: