错误:使用已删除的函数 'ClassName::ClassName(const ClassName&)'

Posted

技术标签:

【中文标题】错误:使用已删除的函数 \'ClassName::ClassName(const ClassName&)\'【英文标题】:error: use of deleted function 'ClassName::ClassName(const ClassName&)'错误:使用已删除的函数 'ClassName::ClassName(const ClassName&)' 【发布时间】:2018-11-27 03:46:12 【问题描述】:

我在编译时不断收到此错误,但我不知道为什么。我看过this 的帖子和this 的帖子,但它们似乎是不同的问题。

相关代码结构为:

// main.cpp

#include "MyClass.h"

int main() 
    MyClass newClass = MyClass();



// MyClass.h

#include <string>
#include <sstream>
#include <vector>
using namespace std;
class Node;

class MyClass 
private:
    vector<Node*> nodes;
    int number;
    stringstream fileInfo;
public:
    MyClass();
    ~MyClass();
;


// MyClass.cpp

#include "MyClass.h"

MyClass::MyClass() 
    number = 1;


MyClass::~MyClass() 

我在编译时遇到的错误是:

main.cpp: In function 'int main()':
main.cpp:4:29: error: use of deleted function 'MyClass(const MyClass&)'
  MyClass new Class = MyClass();
                              ^
In file included from main.cpp:1:0:
MyClass.h:7:7: note: 'MyClass::MyClass(const MyClass&)' is implicitly deleted because the definition would be ill-formed:
  class MyClass 
        ^
MyClass.h:7:7: error: use of deleted function 'std::__cxx11::basic_stringstream<_CharT, _Traits, _Alloc>::basic_stringstream(const std::__cxx11:basic_stringstream<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
In file included from MyClass.h:2:0,
                 from main.cpp:1:
/usr/included/c++/5/sstream:721:7: note: declared here
        basic_stringstream(const basic_stringstream&) = delete;
        ^

我已经尝试初始化构造函数中的所有类成员,但这并没有改变错误。除此之外,我想不出有什么问题。

【问题讨论】:

【参考方案1】:

问题是你的类是不可复制的,因为它包含一个std::stringstream(它本身是不可复制的)。这导致它的复制构造函数被删除,这是编译器试图告诉你的。要解决此问题,请不要在 main 函数中使用复制初始化语法。

int main() 
  MyClass newClass;

【讨论】:

以上是关于错误:使用已删除的函数 'ClassName::ClassName(const ClassName&)'的主要内容,如果未能解决你的问题,请参考以下文章

在 qt C++ 信号和槽中使用已删除函数错误

C++ 错误(C2280)试图访问已删除的函数 [关闭]

std::atomic_int 出现“使用已删除函数”错误

错误:使用已删除的函数 boost::filesystem3::directory_iterator

调用递归函数时出现编译器错误 - “试图引用已删除的函数”

错误:使用已删除的函数‘std::unique_ptr<...> [关闭]