[英]Operator Issue with creating this 2D array of nodes?
所以我正在嘗試創建一個二維數組,我是 C++ 的新手,所以我有點困惑,我知道我使用了太多新運算符,但我不知道該保留哪個。 而且我不確定如何處理操作員錯誤。
節點類 -
class Node
{
public:
int name;
Node *topedge;
Node *bottomedge;
Node *leftedge;
Node *rightedge;
};
主要的
#include <iostream>
#include <node.h>
#include <cstdlib>
using namespace std;
int main(void)
{
Node* grid = new Node[10][10]; //error here
//populate grid
int h = 0;
for ( int j = 0; j < 10; j++ ){
for ( int i = 0; i < 10; i++ ){
grid[j][i] = new Node(); //error here
grid[j][i]->name = h; //error here
h++;
}
}
for ( int j = 0; j < 10; j++ ){
for ( int i = 0; i < 10; i++ ){
cout << grid[j][i]->name << '('<< j << ',' << i << ')' << endl;
}
}
return 1;
}
以下是我運行時遇到的錯誤,
main.cpp: In function ‘int main()’:
main.cpp:10:33: error: cannot convert ‘Node (*)[10]’ to ‘Node*’ in initialization
Node* grid = new Node[10][10];
^
main.cpp:17:14: error: no match for ‘operator[]’ (operand types are ‘Node’ and ‘int’)
grid[j][i] = new Node();
^
main.cpp:18:14: error: no match for ‘operator[]’ (operand types are ‘Node’ and ‘int’)
grid[j][i]->name = h;
^
main.cpp:25:22: error: no match for ‘operator[]’ (operand types are ‘Node’ and ‘int’)
cout << grid[j][i]->name << '('<< j << ',' << i << ')' << endl;
^
<builtin>: recipe for target 'main.o' failed
首先定義你的類Node
然后試試這個
Node** grid = new Node*[10];
for(int i = 0; i < 10; ++i)
grid[i] = new Node[10];
帶有std::array
示例示例。 在我認為需要的地方插入了解釋性評論。
#include <iostream>
#include <array>
#include <string>
// using namespace std; prefer not to use this. It can cause confusing bugs
// simple test node
struct Node
{
std::string name;
};
int main() // no need for void C++ knows when a parameter list is empty by
// the absence of parameters.
{
std::array<std::array<Node, 10>, 10> grid;
// give the nodes names for testing purposes
for (size_t j = 0; j < grid.size(); j++) // using size of grid instead of
// magic number
{
for (size_t i = 0; i < grid[i].size(); i++)
{
grid[j][i].name = std::to_string(j) + "," + std::to_string(i);
}
}
// print the names
for (size_t j = 0; j < grid.size(); j++)
{
for (size_t i = 0; i < grid[i].size(); i++)
{
std::cout << grid[j][i].name << '(' << j << ',' << i << ')' << std::endl;
}
}
return 1;
}
推薦閱讀:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.