问题现象
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;
}
}