运算符重载:正常 MSVS,但在 g++ 中失败
overload of operator: ok MSVS but fails in g++
我有代码在Visual Studio 2010中编译没有错误。但是 g++ 放了错误
CComplex.cpp: In member function 'Complex Complex::operator+(Complex&)':
CComplex.cpp:22: error: no matching function for call to 'Complex::Complex(Complex)'
CComplex.cpp:15: note: candidates are: Complex::Complex(Complex&)
make: *** [CComplex.o] Error 1
请告诉我我的代码有什么问题。
复杂.h
class Complex
{
public:
Complex();
Complex(double _Re, double _Im);
Complex(Complex& c);
Complex operator+(Complex& num);
inline double& fRe(void){return Re;}
inline double& fIm(void){return Im;}
protected:
double Re;
double Im;
}
复杂.cpp
Complex::Complex(){
Re = 0.0;
Im = 0.0;
}
Complex::Complex(double re, double im){
Re = re;
Im = im;
}
Complex::Complex(Complex& complex){
*this = complex;
}
Complex Complex::operator+(Complex& num){
return Complex(Re + num.fRe(), Im + num.fIm());
};
Complex Complex::operator+(Complex& num){
return Complex(Re + num.fRe(), Im + num.fIm());
};
在返回调用中,临时对象的复制 c-tor,它不能绑定到左值引用。用
Complex(const Complex& c);
也供operator +
使用
Complex operator + (const Complex& c)
或
Complex operator + (Complex c)
对于第一种情况,函数fRe
和fIm
应该是常量函数,或者你应该对传递的对象进行显式复制。
它可以在 MSVC 中编译,而不是用 g++ 编译,因为在执行返回值优化时,MSVC 错误地不检查是否存在可接受的复制构造函数。
相关文章:
- 代码在main()中运行,但在函数中出现错误
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- c++17文件系统::recursive_directory迭代器()在mac上没有给出这样的目录,但在windows上
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 换位表导致测试失败(但在游戏中运行良好)
- 库标题在标题中不可见,但在 cmake build 下.cpp文件中完全可见.为什么?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 在成员dynamic_bitset上使用 boost::from_block_range 时出错,但在本地dynamic
- 编译在我的 Mac 上工作,但在集群 (Linux) 上不起作用
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- 我的代码运行良好,但在游戏循环中中断
- C++ assigment std::list:<typename>:itrator 在 main 中工作,但在方法中它不起作用
- C++代码在台式机上工作正常,但在笔记本电脑上则不行
- 实现 DFS 在较短的输入下工作正常,但在较大的输入下会抛出分段错误
- 点云库在VS 2019中不起作用,但在VS 2017中确实有效
- C++ Python 模块在 Blender 中崩溃,但在 Python 控制台中不会崩溃
- 分段 Linux Ubuntu 中的 g++ 错误,但在 Windows 中的 g++/MingW 中,在 C++ 中打
- 为什么数组大小信息可用于"sizeof"运算符和 delete[] 运算符,但在将数组作为参数传递到
- 如何处理没有默认构造函数但在另一个构造函数中构造的对象?