我正在创建一个将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中编译。我会在编码时忽略错误。虚警。对不起的人。
答案 0 :(得分:2)
从函数定义中的括号中删除第一个值。
像这样:
CurrentState::CurrentState(int state[][3])
{
...
}
我强烈建议使用std::array
或std::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];