簡體   English   中英

C++ object 參數混淆

[英]C++ object parameters confusion

我在傳遞 object 作為我的一個函數的參數時遇到問題(我認為)。 在我的一個名為 Engine.cpp 的類中,我從另一個名為 knight.cpp 的 class 調用 function。 下面是兩者的代碼。

引擎.cpp

void Engine::player_controling(N5110 &lcd,Gamepad &pad)
{
   knight.draw(lcd); //draws the knight in the starting position
} 

騎士.cpp

void Knight::init() //starting postion for the knight
{
    x_knight=42;             //X-cordinate for the knight
    y_knight=33;             //Y-cordinate for the knight
}


void Knight::draw(N5110 &lcd) //draws the knight in the start pos
{
  const int man[17][13] =  {      //the array for the knight, 1=pixel turn on.
    {0,0,0,0,0,0,0,0,0,0,0,0,0},
    {0,0,1,0,1,0,1,0,0,0,0,0,0},
    {0,0,0,1,1,1,0,0,0,0,0,0,0},
    {0,0,0,1,1,1,0,0,0,0,0,0,0},
    {0,0,0,0,1,0,0,0,0,0,0,0,0},
    {0,1,1,1,1,1,1,1,0,0,0,0,0},
    {0,1,0,1,1,1,0,1,0,0,0,0,0},
    {0,1,0,1,1,1,0,1,0,0,0,0,0},
    {0,1,0,1,1,1,0,1,0,0,0,0,0},
    {0,1,0,1,1,1,0,1,0,1,0,0,0},
    {0,0,0,1,0,1,0,0,1,0,0,0,0},
    {0,0,0,1,0,1,0,1,0,1,0,0,0},
    {0,0,0,1,0,1,0,0,0,0,1,0,0},
    {0,0,0,1,0,1,0,0,0,0,0,1,0},
    {0,0,0,1,0,1,0,0,0,0,0,0,0},
    {0,0,0,1,0,1,0,0,0,0,0,0,0},
    {0,0,0,0,0,0,0,0,0,0,0,0,0},
    };
    //draws the knight
    lcd.drawSprite(x_knight,y_knight,17,13,(int *)man);
}

在 main.cpp 中,如果我直接調用

knight.draw(lcd);  

然后它在正確的 position 中繪制騎士,因為它需要 x_knight 作為 42 和 y_knight 作為 33 從

knight.init()

但是在 main.cpp 中調用它

Engine.player_controling(lcd & pad);

意味着它設置

x_knight=0
y_knight=0

這是默認值。 我如何獲得 Engine.player_controlling(lcd &pad); 將 knight.init 識別為正確的值?

很可能在調用Engine::player_controling()之前未調用Init() function。

一種可能的解決方案可能是 - 您需要確保在調用Engine::player_controling()的 function 之前調用Knight::Init() )

根據這些代碼片段和行為,我猜你有多個 Knight 實例。

可能, Engine 擁有的實例不是您調用 init 的實例。

它應該是這樣的:

class Engine {
 public:
  // You have to initialize Knight inside your Engine.
  Engine() {
    knight_.Init(); // This is (I guess) the missing part.
  }
  // Alternatively, you may want to pass an already initialized knight here.
  Engine(const Knight& knight) : knight_(knight) {}
  // ...
  void PlayerControlling(N5110 &lcd,Gamepad &pad) {
    knight_.Draw();
  }
 private:
  Knight knight_;
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM