前向声明和 类

Forward declaration and classes

我正在处理这样一种情况,我试图定义两个相互依赖的 classes。这是我正在尝试做的一个简化示例。

class a{
public:
    int ia;
    int printb(b in){
        return in.ib;
    }
};

class b{
public:
    int ib;
    int printb(a in){
        return in.ia;
    }
};

这给了我未定义的 class b 错误。我试过了

class b;

class a{
public:
    int ia;
    int printb(b in){
        return in.ib;
    }
};

class b{
public:
    int ib;
    int printb(a in){
        return in.ia;
    }
};

但这并没有解决问题。有什么想法吗?

您所要做的就是将成员函数的实现保留在 class 定义之外。然后,您可以确保在实现成员之前定义了两个 classes:

class b;

class a{
public:
    int printb(b in);
    int ia;
};

class b{
public:
    int ib;
    int printb(a in);
};

int a::printb(b in){
        return in.ib;
    }
int b::printb(a in){
        return in.ia;
    }