我有这样的代码(都是为了一个最小的,可重复的示例而制作的):
enum class gameState{
Normal,
Special};
class Piece{
public: Vector2i position;
int shape;};
class Board{
public: int array[8][8];
std::vector<Piece> f;
Board() : f(std::vector<Piece>(32)) {}; };
void promotion(int shape, gameState &state, Board &b){
state = gameState::Special;
b.array[b.f[0].position.x][b.f[0].position.y] = shape;
b.f[0].shape = shape;};
然后我尝试在main中调用它们:
int main(){
gameState state = gameState::Normal;
Board b;
promotion(1, state, b);
return 0;};
问题在于,它似乎正确地引用了gameState state
对象的引用,它没有修改Board b
对象,这是不应该发生的。如何通过引用(或指针)正确传递Board b
?
P.S。:Vector2f
只是SFML库使用的2D向量。
答案 0 :(得分:0)
实际上,您的代码中的董事会是(正确地)通过引用促销功能传递的。 您确定函数调用后未更改吗? 这样做会显示什么:
int main(){
gameState state = gameState::Normal;
Board b;
std::cout << b.array[b.f[0].position.x][b.f[0].position.y] <<std::endl;
promotion(1, state, b);
std::cout << b.array[b.f[0].position.x][b.f[0].position.y] <<std::endl;;
return 0;
};