我对某些增强功能不熟悉,但是在尝试将对boost :: any的引用转换为对自定义类的引用时遇到了一些问题(目前,它是空的,我仍在弄清楚该课程)。
很快,我有:
class MyClass
{
public:
MyClass();
~MyClass();
private:
}
MyClass function(boost::any &source)
{
if (source.type() == typeid(MyClass))
return boost::any_cast<MyClass>(source);
}
我还没有实现构造函数和析构函数,因此它们仍然是默认的。
在Visual Studio 2017中编译时,我收到以下消息:
严重性代码说明项目文件行抑制状态错误LNK2001无法解析的外部符号“ public:__thiscall MyClass ::〜MyClass(void)”(?? 1MyClass @@ $$ FQAE @ XZ)NativeToManagedBridge C:\ bridge_library \ testCli_sources \ NativeToManagedBridge \ anyHelper.obj 1
答案 0 :(得分:1)
您分别用MyClass();
和~MyClass();
声明了您的默认构造函数和析构函数。这是什么意思?您正在告诉构造函数; “请不要为我实现构造函数或析构函数,我会做的” 。如果现在不对它们进行定义,则会得到链接器错误,因为编译器不知道在哪里可以找到析构函数的定义。您可以通过多种方式解决此问题:
MyClass() = default
。MyClass() {}
。