1

我有一个结构类型

typedef struct {

Point CellLocation;
enumCell isOccupied;
Node* coveringStation;
vector< pair<float,Node*> > coveredBy;
} Cell;

然后尝试使用动态输入声明二维单元格数组,例如:

this->Height = par("Height");
this->Width =  par("Width");

Cell **c;

c = new Cell*[Width];
for (int i = 0; i < Width; i++)
    Cell[i]= new Cell[Height];

我得到这个输出:

 error: expected unqualified-id before ‘[’ token

on Cell[i]= new Cell[Width];

我究竟做错了什么?

4

2 回答 2

4

Cell是你的类型名

你想做c[i] = new ...

于 2013-11-04T11:39:08.627 回答
1

在 C++ 中,你不需要 C 风格typedef struct {...} ...:你可以定义一个structwithout typedef,像这样:

struct Cell {
   Point CellLocation;
   enumCell isOccupied;
   ....       
};

此外,您可以使用 C++ 方便的容器类,例如 包含另一个的 ,而不是使用分配的原始 C 样式数组new[](并手动释放delete[],和异常不安全) ,例如:std::vectorstd::vector

// 2D matrix of cells (as vector of vector)
vector<vector<Cell>> cells;

// Create the rows
for (size_t i = 0; i < Height; i++) {
    // Add an empty row
    cells.push_back(vector<Cell>());
}

// Add columns to each row
for (size_t j = 0; j < Width; j++) {
    for (size_t i = 0; i < cells.size(); i++) {
        cells[i].push_back(Cell());
    }
} 

您可以使用cells[i][j]语法来访问矩阵中的单个元素。

另一种方法是使用单个 vector模拟二维矩阵:

// 2D matrix, simulated using a 1D vector
vector<Cell> cells(Height * Width);

// Access element at index (row, column), using:
cells[row * Width + column] = ... ;
于 2013-11-04T12:09:57.043 回答