C ++使用“this”作为参数?

时间:2014-06-18 05:04:28

标签: c++ class object parameters

所以,我正在尝试重现我在C ++程序中用Java学到的一件事,而我却无法完成这项工作!

以下是我想要做的一个例子:

class Game{
public:
    int screenWidth, screenHeight;
    Screen* titleScreen;
    void createScreen(){
        titleScreen = new Screen(this);
    }
}

class Screen{
public:
    Game* game;
    Rect quad1;
    Screen(Game* game){
        this->game = game;
        quad1.x = game->screenWidth/2;
    }
}

我甚至不确定这段代码是否正确,因为我现在创建它只是为了展示我想要做的事情。

所以,基本上,我想要做的是在“Screen”中为“Game”创建一个引用,这样我就可以使用它的属性和方法(在这种情况下,屏幕宽度),即使“Screen”正在被实例化在“游戏”里面。我在Java中做了类似的事情并且它工作得很好,但对于C ++我得到了很多错误,我甚至不知道如何解释它们...我尝试使用指针作为参数而不是使用“this”我试过使用“& this”,但没有一个工作,我得到了同样的错误......

那么,我做错了什么?我怎样才能做到这一点?这在C ++中甚至可能吗?

2 个答案:

答案 0 :(得分:0)

使用前向声明并在定义所需内容后定义该函数。

class Screen; // Forward declaration

class Game{
public:
    int screenWidth, screenHeight;
    Screen * titleScreen;
    void createScreen();
}

class Screen{
public:
    Game* game;
    Rect quad1;
    Screen(Game *game){
        this->game = game;
        quad1.x = game->screenWidth/2;
    }
}

// Out-of-line definition.
// This should be declared "inline" if it's in a header file.
void Game::createScreen(){
    titleScreen = new Screen(this);
}

答案 1 :(得分:0)

a)向前宣传游戏类。

b)使Screen(Game *game)构造函数接受指针而不是对象,因为你传递了这个指针。

参考以下示例

http://ideone.com/J8He9f