C++ shared_ptr 复制构造函数语法

发布于 2024-12-17 08:24:31 字数 736 浏览 0 评论 0原文

我正在尝试编译以下 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& 
}

任何帮助表示赞赏。

I have the following C++ code that I'm trying to get to compile (relevant sections follow). I'm having trouble understanding what's wrong with my syntax.

I get the error

C2664: A(const A&) : cannot convert parameter 1 from A *const to const A&

As I understand it, the *b.getA() should dereference the pointer, giving me the actual object, which I should then be able to copy with the copy constructor.

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& 
}

Any help is appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

会傲 2024-12-24 08:24:31

您的复制构造函数不正确,它应该是 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();
}

Your copy constructor is incorrect, it should be A(const A&) not A(const &A).

This compiles fine:

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();
}
挽你眉间 2024-12-24 08:24:31

A(const &A); 是错误的。有两种正确且等效的形式。这些都是

A(const A & /*name*/);
A(A const & /*name*/);

A(const &A); is wrong. There are two correct and equivalent forms. These are

A(const A & /*name*/);
A(A const & /*name*/);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文