前向声明中的字段类型不完整[重复]

2024-03-19

我使用以下简单文件重现错误。

它说:

字段的类型“Foo”不完整

bar.h:

class Foo;

class Bar{
    private:
        int x_;
        Foo foo_; // error: incomplete type

    public:
        void setx(int x) {x_ = x;};
        void increment(int);

};


class Foo{

public:
    void run(int y,Bar& bar) {bar.setx(y);};
};

void Bar::increment(int i){foo_.run(i,*this);}

Member foo_不能是引用或指针。原因是在我的实际代码中,我无法在Bar的初始化列表中初始化Foo。


你的问题可以简化为:

class Foo;

class Bar{
    Foo foo_; // error: incomplete type
};

这里你做了一个类型的前向声明Foo,即没有完整定义的声明:在 C++ 中这足以声明一个指针,但不能像您在Bar.

要么给你的类一个完整的定义:

class Foo{
    // put details here
};

class Bar{
    Foo foo_; // OK
};

或者使用(智能)指针,例如:

class Foo;

class Bar{
    std::unique_ptr<Foo> foo_; // OK
};

或更改订单声明,如所示巴泰克·巴纳切维奇 https://stackoverflow.com/a/44388605/6612932.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前向声明中的字段类型不完整[重复] 的相关文章

随机推荐