c++ - 错误:使用已删除的函数 'ClassName::ClassName(const ClassName&)'
问题描述
编译时总是出现这个错误,但我不知道为什么。我看过这篇文章和这篇文章,但它们似乎是不同的问题。
相关代码结构为:
// 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;
^
我已经尝试初始化构造函数中的所有类成员,但这并没有改变错误。除此之外,我想不出有什么问题。
解决方案
问题是您的类不可复制,因为它包含 a std::stringstream
(它本身不可复制)。这导致它的复制构造函数被删除,这是编译器试图告诉你的。要解决此问题,请不要在main
函数中使用复制初始化语法。
int main() {
MyClass newClass;
}
推荐阅读
- python - 熊猫数据框到一维数组
- eclipse - 如何在rcptt中获取当前工作目录
- angular - 带有 ng-template 和 async 的 ngIf 在 Angular 中短暂显示错误值
- python - 如何通过正则表达式拆分python列表
- angular - Angular 材质主题定制
- haskell - 如何为使用 Stack 构建的 Haskell 项目设置可执行输出位置?
- python - Scrapy:如何抓取从下拉列表中选择的多个网页
- c# - asp.net core 2.1 ef core 2.1 日期比较在服务器上不起作用
- jquery - 我可以在 jQuery 中获取一个项目所在的所有 div id 的数组吗?
- c# - 这个自相关公式是否正确编程?