C++ 编译 invalid use of incomplete type

牧云@^-^@ 提交于 2019-12-17 00:17:25

问题现象

class cat;

struct dog {
    cat *point;

    friend bool operator<(const dog &a, const dog &b) {
        cat *cat_a = a.point;
        cat *cat_b = b.point;
        return cat_a->age < cat_b->age;
    }
}

class cat {
public:
    int age;
}

编译报错: invalid use of incomplete type

解决办法

报错的原因大概是cat向前声明,但是编译器在运行friend bool operator<(const dog &a, const dog &b) 时暂时还不知道cat的具体实现方式,所以无法获得变量age的值。
将cat的声明放在dog前面可以解决。

class cat;


class cat {
public:
    int age;
}


struct dog {
    cat *point;

    friend bool operator<(const dog &a, const dog &b) {
        cat *cat_a = a.point;
        cat *cat_b = b.point;
        return cat_a->age < cat_b->age;
    }
}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!