C ++如何从对象访问方法而没有循环依赖?

时间:2015-07-13 17:03:41

标签: c++ reference circular-dependency

我有什么:

包含以下内容的类游戏

  • 对OpenGLManagement类的引用
  • 一个std:Pieces的矢量

包含以下内容的类:

  • 旋转()棋子的方法

包含以下内容的类OpenGLManagement:

  • 方法doStuff()

这样的事情(我只是让代码对问题有用):

class Piece
{
public:
   void rotate(); //rotate this piece
}

class OpenGLManagement 
{
public:
   doStuff(); //How can I access the rotate() function on the Piece class?
}

class Game
{
public:
   Game(OpenGLManagement& openGLObj) : m_openGL(openGLObj) {}
private:
   OpenGLManagement& m_openGL; //a reference to my object
   std::vector<Piece> m_pieces; //my vector of pieces
}

int main()
{
    OpenGLManagement myOpenGL;
    Game myGame(myOpenGL);

    //...etc

    return 0;
}

我的目标:

如何从doStuff()函数访问Piece类的rotate()函数?

在我的代码中可以/应该更改什么才能在良好的C ++实践中实现这一目标?:)

我希望通过引用指向任何地方来避免循环依赖。此外,我需要先创建myOpenGL对象...所以我还不知道对Game对象的引用......

谢谢!

3 个答案:

答案 0 :(得分:1)

只需将Piece课程放在其他课程之上。

答案 1 :(得分:1)

如果正确组织包含,则不会存在循环依赖关系。您不需要OpenGlManagment课程来定义Piece,也不需要&#39; Piece&#39;用于OpenGlManagment类定义。至少我想你的代码是这样的。如果你把函数定义放在* .cpp文件中,只有类定义和转发声明在正确的* .h文件中,一切都应该没问题。像这样:

Piece.h

class Piece
{
public:
   void rotate(); //rotate this piece
}

Piece.cpp

#include "Piece.h"

void Piece::rotate(){
//definition here
}

OpenGlManagment.h

class Piece;

class OpenGLManagement 
{
public:
   void doStuff();
}

OpenGlManagment.cpp

#include "OpenGlManagment.h"
#include "Piece.h"

void OpenGLManagement::doStuff(){
//use your Piece methods here
}

答案 2 :(得分:0)

创建了一个用静态对象实例化其他两个的类。 然后我创建了两个get参考方法。