C++复制构造函数编译错误
C++ copy constructor compilation error
我已经阅读了一些关于这个主题的文章,但在编译自己的代码时仍然存在问题。
我有A级:
class A
{
public:
List<int> data;
A(){}
A(A&){}
A& operator= (const A& a)
{
// copy the data from a to data
}
};
B类将调用A类:
class B
{
public:
A makeA()
{
A a;
return a;
}
A getA()
{
A a = makeA();
return a;
}
};
当我在Linux下用g++编译代码时,我得到了:
对"A::A(A)"的调用没有匹配的函数。
编译器似乎只是忽略了赋值操作。你能帮我摆脱困境吗?
为了编译它,复制构造函数必须通过const
引用获取其参数:
A(const A&){}
将const
添加到构造函数签名中可以修复此问题(ideone上的演示)。
由于您要定义一个赋值运算符和一个复制构造函数,因此应该强烈考虑添加一个destructor ~A()
(请参阅三规则)。
此处不使用赋值运算符。
A a = makeA();
这一行是初始化;它使用复制构造函数将CCD_ 4返回的值复制到CCD_。编译器抱怨A::A(A&)
不能与临时;将其更改为更常见的形式A(const A&)
,情况就会好得多。
@彼得是对的。复制构造函数A(A&){}
希望是A(const A&){}
。原因是A(A&){}
告诉编译器准备修改传递给复制构造函数的A
,这实际上没有意义,而且在您传递的A
是临时的情况下肯定没有意义。
相关文章:
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- std::is_base_of表示ctor编译错误
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- Qt5:使用QCommandLineParser类时出现奇怪的编译错误
- Qt Cmake 错误编译"GuiSupportQt not found"
- Opengl 精度转换错误编译错误 E0415
- 库将ARM架构错误编译为架构X64
- RT 音频 Mac 错误 g++ 编译错误
- 错误编译Boost.log
- 错误编译QT创建者 / QT窗口小部件示例
- 错误编译MIPS32
- Visual Studio 2013 中的错误(编译和运行代码)
- 链接错误编译qt项目在visual 2010
- 无法用模板错误编译nsgmls
- 奇怪的错误.编译失败
- 如果有人调用c++中的方法,则强制错误(编译时)
- 来自autoconf测试的错误编译命令
- 时间限制超出错误C++编译
- SFML 2.3 和 CodeBlocks 错误编译