C ++无法将普通的2D数组传递给方法

时间:2015-09-04 20:44:38

标签: c++ multidimensional-array

我正在创建一个将2D数组作为变量的类。我希望类的用户能够将它与堆栈上创建的普通2D数组一起使用(int array [3] [3]),或者能够将它与堆上的动态2D数组一起使用(int * array [3])。然后,无论是哪种类型,我都会使用传入的数组填充我的类2D数组。

我看过这篇文章:Passing a 2D array to a C++ function和其他几个非常相似的帖子。我按照答案,但我仍然有问题。这就是我在做的事情:

我的类名为CurrentState,我有两个具有不同签名的构造函数。

CurrentState.h

var service = {  
  categories: [
      {
          name: "category1",
          id: 1,
          questions: [
              {
                  id: 1,
                  question: "example trivia question here",
                  value: 2
              }, {
                  id: 2,
                  question: "example trivia question here",
                  value: 3
              }]
      },
    {
        name: "category2",
        id: 2,
        questions: [
            {
                id: 3,
                question: "example trivia question here",
                value: 5
            }
        ]
    },
    {
        name: "category3",
        id: 3
    }
]
};


var result = service.categories.map(function(cat) {
    return { 
        'name' : cat.name, 
        'count' : !!cat.questions ? cat.questions.length : 0
    }
});

console.log(result);
// [{ name="category1",  count=2}, { name="category2",  count=1}, { name="category3",  count=0}]

CurrentState.cpp

#ifndef A_STAR_CURRENTSTATE_H
#define A_STAR_CURRENTSTATE_H

class CurrentState
{
    private:
        int state[3][3];

    public:
        CurrentState(int** state);      // Dynamic array 
        CurrentState(int state[][3]);  // Normal array
        bool isFinishedState;
        bool checkFinishedState();
};

#endif 

然后在我的main()方法中我这样做:

#include <iostream>
#include "currentState.h"

CurrentState::CurrentState(int** state) {

    // Fill class's state array with incoming array
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            this->state[i][j] = state[i][j];
    }
}

CurrentState::CurrentState(int state[][3])
{        
    // Fill class's state array with incoming array
    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
            this->state[i][j] = state[i][j];
    }
}

使用动态数组在main()中第一次启动CurrentState可以正常工作,但是第二次使用普通数组启动CurrentState会产生错误。

我正在使用JetBrains的CLion IDE,该方法用红色下划线标注:&#34; Class&#39; CurrentState&#39;没有构造函数&#39; CurrentState(int [3] [3])&#39;&#34;

我错过了什么吗?我非常确定类 有一个普通数组的构造函数(int [3] [3])。

我在搜索过程中看到很多其他人在做同样的事情,比如:http://www.cplusplus.com/forum/beginner/73432/以及我在帖子开头发布的链接。

我忽略了什么吗?任何帮助将不胜感激。

修改

我已从数组中删除了第一个参数并将其设为:

#include <iostream>
#include "currentState.h"

using namespace std;



int main()
{
    // Make dynamic array and pass into constructor
    int *array[3];
    for (int i = 0; i < 3; i++)
        array[i] = new int[3];

    CurrentState dynamic(array);

    // Make normal array and pass into constructor
    int a[3][3];

    CurrentState onStack(a); // <-- error says: "Class 'CurrentState' does not have a constructor 'CurrentState(int [3][3])'"


    return 0;
}

我仍然有同样的错误

修改

从命令行开始编译,但它不能在IDE中编译。我会在编码时忽略错误。虚警。对不起的人。

1 个答案:

答案 0 :(得分:2)

从函数定义中的括号中删除第一个值。

像这样:

CurrentState::CurrentState(int state[][3])
{        
    ...
}

我强烈建议使用std::arraystd::vector而不是c风格的数组。除非您在下面添加发布循环,否则您的动态分配代码已经泄漏了内存。

int *array[3];
for (int i = 0; i < 3; i++)
    array[i] = new int[3];

CurrentState dynamic(array);

//Kind of ugly cleanup here
for (int i = 0; i < 3; i++)
    delete[] array[i];