【发布时间】:2014-11-17 06:16:55
【问题描述】:
当我使用g++ test.cpp 编译时,以下代码在 Linux 上引发错误:
#include <iostream>
using namespace std;
class A
{
public:
A(){
cout << "call A()" << endl;
};
A& operator = (const A& a) {
cout << "call operator =" << endl;
return *this;
}
A(A& a) {
cout << "call A(A& a)" << endl;
}
};
A operator - (A& a1, A& a2)
{
cout << "call operate -" << endl;
return a1;
}
int main()
{
A a1;
A a2;
A a3 = a1 - a2;
//a1 = a2;
return 0;
}
错误是:
test.cpp: In function ‘int main()’:
test.cpp:30: error: no matching function for call to ‘A::A(A)’
test.cpp:15: note: candidates are: A::A(A&)
test.cpp:8: note: A::A()
但是在使用 Visual Studio 2010 编译时它可以在 Windows 上运行。为什么?我在 Linux 上的代码有什么问题?
【问题讨论】:
-
请注意,您的减法运算符也应该采用常量引用,除非您的实际实现可以修改其中一个输入参数(但实现可能一开始不应该这样做)。
标签: c++ linux compiler-errors