链接器工具警告 LNK4248

无法解析“type”的 typeref 标记(标记);映像可能无法运行

类型在 MSIL 元数据中没有定义。

如果(使用 /clr 编译的)MSIL 模块中只有某个类型的前向声明(其中在 MSIL 模块中引用了类型,并且 MSIL 模块与具有类型定义的本机模块链接),则可能会发生 LNK4248

在这种情况下,链接器将在 MSIL 元数据中提供本机类型定义,这可能会提供正确的行为。

但是,如果转发类型声明是 CLR 类型,则链接器的本机类型定义可能不正确

有关详细信息,请参阅 /clr(公共语言运行时编译)

更正此错误

  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;
}