链接器工具警告 LNK4248
无法解析“type”的 typeref 标记(标记);映像可能无法运行
类型在 MSIL 元数据中没有定义。
如果(使用 /clr 编译的)MSIL 模块中只有某个类型的前向声明(其中在 MSIL 模块中引用了类型,并且 MSIL 模块与具有类型定义的本机模块链接),则可能会发生 LNK4248。
在这种情况下,链接器将在 MSIL 元数据中提供本机类型定义,这可能会提供正确的行为。
但是,如果转发类型声明是 CLR 类型,则链接器的本机类型定义可能不正确
有关详细信息,请参阅 /clr(公共语言运行时编译)。
更正此错误
- 在 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;
}