使用VC ++ 2015编译代码时,我遇到了两个错误,这是我在VC ++ 2013中没有得到的。以下是两个片段:
CArray<CQualifiedFolderObject*, CQualifiedFolderObject*> CQualifiedFolderObject::mQualifiedFolders =
CArray<CQualifiedFolderObject*, CQualifiedFolderObject*>()
和
sProfileArray COesInterface::g_arrProfiles[] = {
{FALSE, },
{FALSE, },
{FALSE, },
{FALSE, },
{FALSE, CStringArray()},
};
在这两种情况下,我都会得到一个C2280 “试图引用已删除的函数”错误。第一种情况是CArray
,第二种情况是CStringArray
。
我对C ++比较陌生。我想了解为什么这个编译在2013年而不是2015年,以及我可以做些什么来解决这个问题。
答案 0 :(得分:0)
检查类的定义,这个错误意味着你的类已经定义了自定义的析构 - 或者是一个改变了另一个函数的默认生成的函数。
例如:如果声明并定义了destruct-or,则不会获得默认的复制构造函数。
其中有六个,检查规则或默认所有规则。
下面的语法:如果你试图复制它会产生与上面相同的错误。
struct noncopyable
{
noncopyable() =default;
noncopyable(const noncopyable&) =delete;
noncopyable& operator=(const noncopyable&) =delete;
};