Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Can';t从对象数组交换两个对象_C++_Arrays - Fatal编程技术网

C++ Can';t从对象数组交换两个对象

C++ Can';t从对象数组交换两个对象,c++,arrays,C++,Arrays,我目前正在制作一个Line3类型的游戏,我在尝试交换阵列中的两个对象时遇到问题。我的游戏有两个类:Gem类,你必须排队才能获得积分;Board类,包含Gem数组[6][6] 问题在于我的交换方法。在方法内部,我有一些cout来帮助我查看,交换实际上已经完成,但我认为我是在拷贝上进行的,因为在那之后,当我刷新我的板时,宝石不会互换。这是我的代码,请随时提出建议: Board.h #pragma once #include "Gem.h" class Board { pub

我目前正在制作一个Line3类型的游戏,我在尝试交换阵列中的两个对象时遇到问题。我的游戏有两个类:Gem类,你必须排队才能获得积分;Board类,包含Gem数组[6][6]

问题在于我的交换方法。在方法内部,我有一些cout来帮助我查看,交换实际上已经完成,但我认为我是在拷贝上进行的,因为在那之后,当我刷新我的板时,宝石不会互换。这是我的代码,请随时提出建议:

Board.h

#pragma once
#include "Gem.h"

    class Board
    {
    public:
        Board();
        ~Board();

        void gameLoop();
        void refreshGameGrid();
        void refillGameGrid();
        void checkIfStacks();
        void swapGems(Gem& p_firstGem, Gem& p_secondGem);
        Gem getGem(int line, int column);

    private:
        Gem m_gameGrid[6][6];
    };
#pragma once
#include "gemMania.h"

class Gem
{
public:
    Gem();
    ~Gem();

    // Getters
    const string& getRepresentation();
    const string& getColor();
    const string& getPosition();
    int getNumberOfGems();

    // Setters
    void setColorAndRepr(const string&, const string&);
    //Methods
    void switchWith(Gem&);
    void destroyGem();
    void renewGem();

private:
    string m_representation;
    string m_color;
    string m_position;
    static int numberOfGems;

};
Board.CPP

// Swap the position of two Gems on the Board.
    void Board::swapGems(Gem& p_firstGem, Gem& p_secondGem)
    {
        cout <<"Avant : " << p_firstGem.getRepresentation() << " | " << p_secondGem.getRepresentation() << endl;
        p_firstGem.switchWith(p_secondGem);
        cout << "Après : " << p_firstGem.getRepresentation() << " | " << p_secondGem.getRepresentation() << endl;
    }
Gem.cpp

// Switch the attrbutes of two gems, hence swaping the two of them.
void Gem::switchWith(Gem& p_otherGem)
{
    swap(this->m_color, p_otherGem.m_color);
    swap(this->m_representation, p_otherGem.m_representation);
}


提前感谢所有愿意花时间帮助我的人

我猜呢?通过值将
Board
的实例传递到某个地方。我构造Board对象的唯一地方是main:Board gameBoard;gameBoard.gameLoop();您省略了将对象传递给函数的调用
getGem
按值返回
Gem
;你正在修改这些副本。那么我应该更改什么?我总是很难理解指针,比如我应该在某处添加一个*吗?