簡體   English   中英

創建這個二維節點數組的操作員問題?

[英]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;

}

std::array文檔

推薦閱讀:

為什么是“使用命名空間標准;” 被認為是不好的做法?

為什么 C++ 程序員應該盡量減少“new”的使用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM