代码之家  ›  专栏  ›  技术社区  ›  Zack Lee

如何访问前向声明类的成员[重复]

  •  1
  • Zack Lee  · 技术社区  · 6 年前

    我的代码:

    #include <iostream>
    
    class Boo;
    class Foo{
    public:
        int getNum() {
            return booPtr->num; //Error: Member access into incomplete type 'Boo'
        }
        Boo *booPtr;
    };
    class Boo : public Foo {
    public:
        Boo() {
            booPtr = this;
        }
        int num = 45;
    };
    int main() {
        Boo boo;
        int num = boo.getNum();
        std::cout <<  num << '\n';
    }
    

    我得到的错误是:

    我期望的结果是:

    45
    

    我怎样才能修正这个错误,还有什么更常见更安全的方法来达到同样的目的呢?

    2 回复  |  直到 6 年前
        1
  •  2
  •   lubgr    6 年前

    您需要定义成员函数 getNum() 类型 Boo 编译器知道。因此更改 Foo

    class Boo;
    
    class Foo{
      public:
        int getNum();
    
        Boo *booPtr;
    };
    

    接下来是 ,最后

    int Foo::getNum()
    {
        return booPtr->num;
    }
    
        2
  •  5
  •   songyuanyao    6 年前

    您可以将成员函数的定义移出类定义,并在 Boo .

    class Boo;
    class Foo{
    public:
        int getNum();
        Boo *booPtr;
    };
    class Boo : public Foo {
        ...
    };
    
    int Foo::getNum() {
        return booPtr->num;
    }