我有3類1)GameStateManager 2)MenuState(從稱爲遊戲狀態另一個類繼承)3)遊戲狀態錯誤傳遞這個指針作爲參數傳遞給類構造
欲這個指針作爲參數傳遞到MenuState的構造。
我的目標是在MenuState中獲取一個指向GameStateManager對象的指針,以備將來使用。
我得到錯誤:
error C2061: syntax error: identifier 'GameStateManager'
error C2664: 'MenuState::MenuState(const MenuState &)': cannot convert argument 1 from 'GameStateManager' to 'const MenuState &'
note: Reason: cannot convert from 'GameStateManager' to 'const MenuState'
GameStateManager.h
#pragma once
#include <vector>
#include <SFML/Graphics.hpp>
#include "MenuState.h"
class GameStateManager {
public:
static const int MENUSTATE = 0;
static const int FIRSTLEVELSTATE = 1;
GameStateManager();
~GameStateManager();
private:
std::vector<GameState*> States;
int currentState;
};
GameStateManager.cpp
GameStateManager::GameStateManager() {
this->currentState = MENUSTATE;
this->States.push_back(new MenuState(*this)); // Error Line. I Think!
}
MenuState.h
#pragma once
#include "GameState.h"
#include "GameStateManager.h"
class MenuState: public GameState{
public:
MenuState(GameStateManager& gsm);
~MenuState();
};
MenuState.cpp
MenuState::MenuState(GameStateManager& gsm){ // Error Line. I Think!
}
GameState.h
#pragma once
#include <SFML/Graphics.hpp>
class GameState {
//Virtual methods are here in this code which are not important for this question
public:
GameState() {}
~GameState() {}
};
Main.cpp的
#include <SFML/Graphics.hpp>
#include "GameStateManager.h"
int main(int argc, char** argv) {
GameStateManager gsm;
}
你有一個循環包含路徑依賴。 'MenuState.h'確實需要包含GameStateManager.h嗎?我的意思是GameStateManager的前向聲明,並從MenuStat.h中刪除#include「GameStateManager.h」可以解決這個問題。 – drescherjm
錯誤消息指的是複製構造函數。 「錯誤行」與複製構造函數上下文無關。你需要編輯你的問題並提供[mcve]。 –
*** error C2664:'MenuState :: MenuState(const MenuState&)':不能將參數1從'GameStateManager'轉換爲'const MenuState&'***此錯誤是由未提供的代碼引起的。 – drescherjm