boost :: any_cast到我的自定义类

时间:2018-06-21 08:33:06

标签: c++ boost-any

我对某些增强功能不熟悉,但是在尝试将对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

1 个答案:

答案 0 :(得分:1)

您分别用MyClass();~MyClass(); 声明了您的默认构造函数和析构函数。这是什么意思?您正在告诉构造函数; “请不要为我实现构造函数或析构函数,我会做的” 。如果现在不对它们进行定义,则会得到链接器错误,因为编译器不知道在哪里可以找到析构函数的定义。您可以通过多种方式解决此问题:

  1. 明确告诉构造函数使用默认定义:MyClass() = default
  2. 不列出构造函数声明以允许编译器自动定义它。
  3. 定义您的构造函数:MyClass() {}

您可以阅读有关definition and declaration here.

的更多信息