我有以下C ++代码,我正在尝试编译(相关部分如下)。我无法理解我的语法有什么问题。
我收到错误
C2664: A(const A&) : cannot convert parameter 1 from A *const to const A&
据我了解,*b.getA()
应该取消引用指针,给我实际的对象,然后我可以用复制构造函数复制它。
class A: {
public:
A(const &A);
A();
};
class B: {
private:
shared_ptr<A> myA;
public:
B() { myA = make_shared<A>(A()); }
shared_ptr<A> getA() { return myA; }
};
main() {
B b; // default constructor of B
A a = *b.getA(); //try invoke copy constructor from A
// Throws error C2664: A(const A&) : cannot convert parameter 1 from A *const to const A&
}
感谢任何帮助。
答案 0 :(得分:1)
您的复制构造函数不正确,应该是A(const A&)
而不是A(const &A)
。
编译好:
class A {
public:
A(const A&){}
A(){}
};
class B {
private:
shared_ptr<A> myA;
public:
B() { myA = make_shared<A>(); }
shared_ptr<A> getA() { return myA; }
};
main() {
B b; // default constructor of B
A a = *b.getA();
}
答案 1 :(得分:0)
A(const &A);
错了。有两种正确和等效的形式。这些是
A(const A & /*name*/);
A(A const & /*name*/);