C ++将类对象传递给函数

黑暗骑士

我是C ++编程的新手。现在,我有状态课。我想使用此类创建相邻状态,因此将函数getNeighboringStates()添加到此类中。在此函数中,我将“ neighboring_states”传递给函数set_neighboring_state(),此函数更改“ neighboring_states”的值。在此函数中,我设置了一个for循环进行测试。它打印出“ 7 1 0 3 6 4 5 2 8”,这是我想要的值。但是在函数getNeighboringStates()中,我还设置了一个与set_neighboring_state()具有相同任务的for循环,但屏幕显示为“ 0 1 4716672 2686652 2686528 0 4716676 4519501 4716676”。

我不知道我的代码有什么问题。我现在需要做什么?

int n; // The number of columns as well as rows of the board
int k; // The kind of heuristic function to use
int tilesCount; // The number of tiles, including the blank one
int statesCount; // The number of states generated

int* m_initTiles;
int* m_goalTiles;
int tmpTile;


const int UP = 0;
const int DOWN = 1;
const int RIGHT = 2;
const int LEFT = 3;
int* direction;

class State {
public:


    State(){}

    int getBlankTilePosition() {
        for (int i = 0; i < n * n; i++) {

            if (stateTiles[i] == 0)
                return i;

        }
    }

    void set_neighboring_state(State* neighboring_state, int direction) {
        int blankPosition = getBlankTilePosition();
        int neighbor_tiles[n * n];

        for (int i = 0; i < n * n; i++) {
            neighbor_tiles[i] = getStateTiles()[i];
        }

        switch(direction) {
        case UP:
            if (blankPosition/n < 1) return;
            else {
                swap(neighbor_tiles[blankPosition], neighbor_tiles[blankPosition - n]);
                neighboring_state->set_tiles(neighbor_tiles);

                 // This for loop print out "7 1 0 3 6 4 5 2 8"
                 for (int i = 0; i < n * n; i++)
                     cout << neighboring_state.getStateTiles()[i] << " "; cout << endl;
            }
            break;
        case DOWN:
            if (blankPosition/n == n - 1) return;
            else {
                swap(neighbor_tiles[blankPosition], neighbor_tiles[blankPosition + n]);
                neighboring_state->set_tiles(neighbor_tiles);
            }
            break;
        case LEFT:
            if (blankPosition % n == 0) return;
            else {
                swap(neighbor_tiles[blankPosition], neighbor_tiles[blankPosition - 1]);
                neighboring_state->set_tiles(neighbor_tiles);
            }
            break;
        default:
            if ((blankPosition + 1) % n == 0) return;
            else {
                swap(neighbor_tiles[blankPosition], neighbor_tiles[blankPosition + 1]);
                neighboring_state->set_tiles(neighbor_tiles);
            }
            break;
        }
    }

    /*
    The maximum number of neighboring state that can be created is 4.
    This function return the neighboring states of a certain state.
    The first state represents for the "left" neighbor, the second,
    the third and the fourth represent the "right", "up, and "down"
    neighbor, respectively.
    */
    State* getNeighboringStates() {
        State* neighboring_states;
        neighboring_states = new State[4];

        for (int i = 0; i < 4; i++)
            set_neighboring_state(&neighboring_states[i], direction[i]);

        // This print out "0 1 4716672 2686652 2686528 0 4716676 4519501 4716676"
        cout << endl;
        for (int i = 0; i < n * n; i++)
            cout << neighboring_states[0].getStateTiles()[i] << " ";
        cout << endl;

        return neighboring_states;
    }



    State(int* pStateTiles) {
        stateTiles = pStateTiles;
    }

    void set_tiles(int* tiles) {
        stateTiles = tiles;
    }

    int* getStateTiles() {
        return stateTiles;
    }

private:
    int* stateTiles;

};
void input(const char* fileName) {
ifstream fin;
fin.open(fileName);

// read n, k from file
fin >> n >> k;

// allocate m_initTiles and m_goalTiles memory
m_initTiles = new int[n * n];
m_goalTiles = new int[n * n];


for (int i = 0; i < n * n; i++)
    fin >> m_initTiles[i];
for (int i = 0; i < n * n; i++)
    fin >> m_goalTiles[i];

for (int i = 0; i < n * n; i++)
    cout << m_initTiles[i] << " ";
cout << endl;
for (int i = 0; i < n * n; i++)
    cout << m_goalTiles[i] << " ";
cout << endl;

fin.close();

}

void initDirection() {
direction = new int[4];
direction[0] = UP;
direction[1] = DOWN;
direction[2] = RIGHT;
direction[3] = LEFT;
}

int main() {

input("nPuzzle.inp");
initDirection();
State init_state (m_initTiles);
State goal_state (m_goalTiles);

State* init_neighbor = init_state.getNeighboringStates();
// int* state_tile = init_neighbor[0].getStateTiles();
// for (int i = 0; i < n * n; i++)
//  cout << state_tile[i] << " ";

return 0;
}
声音21
int blankPosition = getBlankTilePosition();
int neighbor_tiles[n * n];

int neighbor_tiles[n * n];从上面的代码段中删除行,并使其对所有函数全局可用,因此将其声明为不是函数的类的数据,即add int neighbor_tiles[n * n]; to class as an data type .

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

是否可以将Moq对象传递给C#类构造函数?

来自分类Dev

将类对象传递到模板函数中。C ++

来自分类Dev

c ++:将对象传递给函数

来自分类Dev

C#静态类:我应该将对象传递给构造函数吗?

来自分类Dev

C#静态类:我应该将对象传递给构造函数吗?

来自分类Dev

C#将子对象传递给要用基类的通用属性填充的方法

来自分类Dev

将FORTRAN对象传递给C,反之亦然

来自分类Dev

将Obj-C的Dictionary对象传递给Swift

来自分类Dev

将Python对象传递给C模块

来自分类Dev

将Javascript对象传递给C#

来自分类Dev

如何将C#对象传递给$ .ajax

来自分类Dev

将FORTRAN对象传递给C,反之亦然

来自分类Dev

C ++:如何将一个对象传递给另一个对象构造函数?

来自分类Dev

C# - 将一个对象传递给构造函数,该对象目前为空,但稍后会创建

来自分类Dev

将复杂对象传递给C ++中的函数,但数组订阅运算符无法正常工作

来自分类Dev

将数组传递给类函数C ++

来自分类Dev

如何将具有字符串数据成员的类的对象传递给C ++中的另一个类

来自分类Dev

C ++是否有定义的方法将指针传递给类的成员对象的成员函数?

来自分类Dev

将类对象指针传递给默认构造函数(C++ 子例程)

来自分类Dev

将C ++对象传递给C例程时的未定义行为

来自分类Dev

将类对象传递给不同的函数

来自分类Dev

如何在C ++中通过引用将对象传递给函数?

来自分类Dev

将派生对象传递给构造函数时出现错误 C2664

来自分类Dev

如何从PHP将DateTime对象传递给用C#编写的Soap Web服务?

来自分类Dev

通过Razor(MVC4)将C#字典对象传递给JavaScript

来自分类Dev

无法将Boost.Any对象传递给C ++ Lua绑定

来自分类Dev

将动态对象传递给C#方法会更改返回类型

来自分类Dev

如何将javascript对象传递给C#MVC 4控制器

来自分类Dev

如何将任何可以显示文本的对象传递给C#方法

Related 相关文章

  1. 1

    是否可以将Moq对象传递给C#类构造函数?

  2. 2

    将类对象传递到模板函数中。C ++

  3. 3

    c ++:将对象传递给函数

  4. 4

    C#静态类:我应该将对象传递给构造函数吗?

  5. 5

    C#静态类:我应该将对象传递给构造函数吗?

  6. 6

    C#将子对象传递给要用基类的通用属性填充的方法

  7. 7

    将FORTRAN对象传递给C,反之亦然

  8. 8

    将Obj-C的Dictionary对象传递给Swift

  9. 9

    将Python对象传递给C模块

  10. 10

    将Javascript对象传递给C#

  11. 11

    如何将C#对象传递给$ .ajax

  12. 12

    将FORTRAN对象传递给C,反之亦然

  13. 13

    C ++:如何将一个对象传递给另一个对象构造函数?

  14. 14

    C# - 将一个对象传递给构造函数,该对象目前为空,但稍后会创建

  15. 15

    将复杂对象传递给C ++中的函数,但数组订阅运算符无法正常工作

  16. 16

    将数组传递给类函数C ++

  17. 17

    如何将具有字符串数据成员的类的对象传递给C ++中的另一个类

  18. 18

    C ++是否有定义的方法将指针传递给类的成员对象的成员函数?

  19. 19

    将类对象指针传递给默认构造函数(C++ 子例程)

  20. 20

    将C ++对象传递给C例程时的未定义行为

  21. 21

    将类对象传递给不同的函数

  22. 22

    如何在C ++中通过引用将对象传递给函数?

  23. 23

    将派生对象传递给构造函数时出现错误 C2664

  24. 24

    如何从PHP将DateTime对象传递给用C#编写的Soap Web服务?

  25. 25

    通过Razor(MVC4)将C#字典对象传递给JavaScript

  26. 26

    无法将Boost.Any对象传递给C ++ Lua绑定

  27. 27

    将动态对象传递给C#方法会更改返回类型

  28. 28

    如何将javascript对象传递给C#MVC 4控制器

  29. 29

    如何将任何可以显示文本的对象传递给C#方法

热门标签

归档