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上不能通过。 展开
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上不能通过。 展开
展开全部
linux下的拷贝构造函数必须严格写成A(const A& a){}
其实拷贝构造函数本身是应该写成这样的,但在vs里面,没加const照样认为是拷贝构造函数
其实拷贝构造函数本身是应该写成这样的,但在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));
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询