Visual C ++ 2015 - 尝试引用已删除的函数

时间:2015-07-30 13:55:26

标签: c++ visual-studio-2015

使用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年,以及我可以做些什么来解决这个问题。

1 个答案:

答案 0 :(得分:0)

检查类的定义,这个错误意味着你的类已经定义了自定义的析构 - 或者是一个改变了另一个函数的默认生成的函数。

例如:如果声明并定义了destruct-or,则不会获得默认的复制构造函数。

其中有六个,检查规则或默认所有规则。

下面的语法:如果你试图复制它会产生与上面相同的错误。

struct noncopyable
{
  noncopyable() =default;
  noncopyable(const noncopyable&) =delete;
  noncopyable& operator=(const noncopyable&) =delete;
};