[英]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.