linux g++编译 c++问题 5

#include<iostream>usingnamespacestd;classA{public:A(){}A(A&a){}AMov(A&a){return*this;... #include<iostream>
using namespace std;
class A{
public:
A(){}
A(A& a){}
A Mov(A& a)
{
return *this;
}
A Mov(int i)
{
return *this;
}
};
void print(int i)
{
cout<<i<<endl;
}
void print(A& i)
{
}
int main(){
A a;
print(a);
a.Mov(a.Mov(1));
}
下面是编译的信息:
~/c/c++$ g++ -o 1 1.cpp
1.cpp: In function ‘int main()’:
1.cpp:26:16: error: no matching function for call to ‘A::Mov(A)’
1.cpp:26:16: note: candidates are:
1.cpp:7:4: note: A A::Mov(A&)
1.cpp:7:4: note: no known conversion for argument 1 from ‘A’ to ‘A&’
1.cpp:11:4: note: A A::Mov(int)
1.cpp:11:4: note: no known conversion for argument 1 from ‘A’ to ‘int’
在vs上没有问题,
感觉这部就是函数的重载吗?怎么在linux上不能通过。
展开
 我来答
terranlong
2012-12-14 · TA获得超过7294个赞
知道大有可为答主
回答量:2660
采纳率:0%
帮助的人:3989万
展开全部
linux下的拷贝构造函数必须严格写成A(const A& a){}
其实拷贝构造函数本身是应该写成这样的,但在vs里面,没加const照样认为是拷贝构造函数
追问
引用传递对象 不行吗?
追答
当然可以,但是拷贝构造函数,参数需要加const,否则在linux下是编译不过的

好吧,是我看漏了,看注释

#include
using namespace std;
class A
{
public:
A(){}
A(const A& a){}
A& Mov(A& a) // 这里参数是A类对象的引用
{
return *this;
}
A& Mov(int i) // 所以应该返回是A&,也就是当前对象的引用
{
return *this;
}
};
void print(int i)
{
cout<<i<<endl;
}
void print(A& i){}
int main()
{
A a;
print(a);
a.Mov(a.Mov(1));
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式