在嵌套类的前向声明中无效使用不完整类型

问题描述 投票:0回答:1

这个问题是关于嵌套类的 C++ 声明规则。我正在寻找一种方法来转发声明以下内容(对于 gcc)或理解为什么它不可能。

标题:

Test.h

Class CTest 
{ 
  public: 
     CTest()
     class CData()
          {
          int  nData;
          };
};

该类在其公共接口中有一个嵌套类CData。现在我想在另一个类中使用它,但只能使用指针,这样我就可以摆脱标头中的前向声明,并且只在

Test.h
文件中包含完整的类
OtherClass.cpp
标头。

// #include "test.h"          // this should be in *.cpp only
class CTest;
class CTest::CData;           //  that is invalid syntax, but it describes what I would like to do

class CSomeOtherClass
{ 
 public: 
     void     DoSomething( CTest::CData* pData ); // any way to get this working? 
 private:
     CTest*   pMyTest;                            // this works fine with forward
}; 

CData
移出
CTest
之类的解决方案不是这个问题的重点。我想知道 C++ 是否提供了一种方法来告诉编译器
CTest::CData*
是一个可以稍后解析的指针,就像处理
CTest*
一样。我认为这应该是可能的,因为存储是已知的(指针),并且我还可以创建一个独立的对象并在没有父对象的情况下传递此类:

pMyData = new CTest::CData()  
MySomeOtherClass->DoSomething( pMyData );    // that would work
c++ forward-declaration
1个回答
0
投票

您可以像这样前向声明嵌套对象:

class CTest {
    class CData;
};

来源:https://en.cppreference.com/w/cpp/language/nested_types

© www.soinside.com 2019 - 2024. All rights reserved.