我正在使用 C++/CLI(版本 9.0)编写 .NET 程序集,并且我想使用 PIMPL 习惯用法来避免在公共(public) header 中放入不必要的内容。不幸的是,当我尝试转发声明一个类,然后使用它的跟踪句柄时,我收到链接器警告 4248:
warning LNK4248: unresolved typeref token (0100000E) for 'MyNamespace.PrivateClass'; image may not run
无论我使用 CLI 类还是 native 类作为实现类,情况似乎都是如此。
示例代码如下:
namespace MyNamespace
{
ref class PrivateClass; // forward dec
ref class MyPublicClass
{
private:
PrivateClass^ m_Imp;
};
}
不幸的是,微软对该警告的解释并没有提供太多信息。
最佳答案
我认为您使用的两种技术并不能很好地结合在一起:
pimpl 的自然应用是避免必须一直更改头文件,从而导致大型 C++ 项目进行大量重新编译。
C++/cli 的自然应用是编写精简的互操作片段,而 VS 在这些项目上的默认行为是将所有代码放入 header 中,这几乎是您所能得到的反 pimpl 的结果。
如果您正在编写足够大的东西来保证 pimpl,我不会推荐 C++/cli。如果您正在编写足够小的东西以使 C++/cli 适合,我不会为 pimpl 烦恼。
YMMV 当然,但这就是我的看法......
关于c++-cli - 在 C++/CLI 中使用 PIMPL 习惯用法时 MSVC++ 链接器警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/335271/