首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:使用已删除的函数‘ClassName::ClassName( ClassName&)’

错误:使用已删除的函数‘ClassName::ClassName( ClassName&)’
EN

Stack Overflow用户
提问于 2018-11-27 03:46:12
回答 1查看 297关注 0票数 2

在编译时,我一直会遇到这个错误,但我不知道为什么。我看过this post和this one,但它们似乎是不同的问题。

相关的代码结构是:

代码语言:javascript
复制
// 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() {}

编译时遇到的错误是:

代码语言:javascript
复制
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;
        ^

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-27 03:54:48

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

代码语言:javascript
复制
int main() {
  MyClass newClass;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53492429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档