标题声明"鸡肉或鸡蛋"

Mar*_*ott 1 c++ header

对于一个项目,我必须编写一个容器类和元素,其中元素需要有关它们所在容器的知识.另外,创建应该由容器中的工厂方法完成.如果你使用标题和一个cpp文件,如果你(像我一样)只允许使用一个标题,我似乎不可能.以下是问题的示例:

class myContainer;
class myElement;

class myContainer
{
  public:
    myElement *createElement()
    {
      myElement *me =new myElement(this); 
      // do some adding to list stuff
      return me;
    }

    int askMyContainer()
    {
       return 42;
    }
};

class myElement
{
  public:
    myElement(myContainer *parent)
    {
     pcontainer=parent;
    }

    int userAskingSomething()
    {
     return pcontainer->askMyContainer();
    }
 protected:
  myContainer *pcontainer;
};
Run Code Online (Sandbox Code Playgroud)

myContainer类需要关于myElement的知识,这就是为什么myElement会出现在myContainer之前,但myElement需要有关myContainer的知识.

Som*_*ude 7

您必须将类定义和方法定义拆分为至少一个类的单独部分.

例如,首先定义myContainer类(即类及其变量/函数,但不定义那些函数的实现).然后myElement上课.遵循这个myContainer成员函数的实际实现(inline如果你想在头文件中标记它们).