为什么类中的前向声明不是内部类的前向声明? C ++

时间:2019-10-01 08:05:32

标签: c++ language-lawyer forward-declaration

我的问题是; 为什么类中的前向声明不是内部类的前向声明?它是定义的还是未定义的? 我只是想知道为什么没有目的。

示例;

class A
{
public:
  class B *b;

  class B
  {
  };
};

class B
{
};

int main()
{
    A a;
    B b;
    A::B ab;

    a.b = &b;  //OK
    a.b = &ab; //Doesn't compile (godbolt.org)

    return 0;
}

编辑: 谢谢大家如果有人想知道名称空间,那么有代码。

namespace A
{
  class B *pb;

  /*class B;
  B pb;*/ //It is the same as above. But has another meaning in class

  class B
  {
  };
}

class B
{
};

int main()
{
    B b;
    A::B ab;

    A::pb = &b;  //Never compiles
    A::pb = &ab; //OK

    return 0;
}

0 个答案:

没有答案