【问题标题】:Forward declaration and classes前向声明和类
【发布时间】:2016-03-12 14:30:57
【问题描述】:

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

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

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

这给了我未定义的 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;
    }
};

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

【问题讨论】:

  • 想一想:不知道b的定义,编译器怎么知道return in.ib;是什么意思?您必须先定义b,然后再定义a::printb
  • 所以只在类中声明子程序,以后再定义?
  • 是的。这可能是一个骗局,但我也不知道如何搜索。 ://
  • 我相信它叫circular dependency。一般来说,它只是意味着您的程序设计中存在缺陷。
  • @BaummitAugen 没有看到公开声明

标签: c++ class forward-declaration


【解决方案1】:

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

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;
    }

【讨论】:

  • 这两个成员函数大概应该标记为inline以与原始代码保持一致。如果这实际上是一个头文件,也是必要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-25
  • 2011-05-08
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多