类中的类-不完整类型是不允许的

Class within class - incomplete type is not allowed

本文关键字:类型 不允许      更新时间:2023-10-16
class Publicatie{
public:
    class Carte : public Publicatie{
    private:
        char* autor;
    };
    class Revista : public Publicatie{
    private:
        char* frecventa_aparitie;
        int numar;
    };
private:
    int cota;
    char* titlu;
    char* editura;
    int anul_aparitiei;
    int tiraj;
    Carte* c;
    Revista* r;
        public:
           //some methods...
}

这是代码,我在类Publicatie内声明类Carte和Revista,我需要有私有成员Carte和Publicatie。我真的不知道如何对这些类进行继承设计。我得到继承的标题错误:public Publicatie,我认为它会工作,因为类已经创建(即使它的私有成员还没有创建)。

你的设计是错误的。你试图定义一个类,在它的定义中你试图使用它本身;这是一个逻辑悖论。
从我可以从你的代码中理解,你试图创建一个名为Publicatie的类,它代表一个出版物(或一个帖子),它有另外两个变体,名为CarteRevista。如果是这样的话,为什么Publicatie需要有两个类型为CarteRevista的私有成员?也许你可以去掉这两个元素。
或者您可以将它们的一些共享成员(例如titlu, tiraj和…)移动到另一个抽象类中,然后定义Publicatie, CarteRevista,以便所有这些成员都继承同一父类。

只能从完整类型的类继承。但是,您不需要在环境类定义中使用嵌套类定义。相反,您可以这样做:

struct Foo
{
    struct Bar;
    Bar * p;
    int get();
};
struct Foo::Bar : Foo
{
    int zip() { return 4; }
};
int Foo::get() { return p->zip(); }