问题场景:
在 cpp文件中, 使用 vector<结构体名称> xxx
来代替指针/数组 定义一串结构体
时。
问题描述
代码:
#include <iostream>
#include <vector>
using namespace std;
struct node {
int type;
};
...
vector<node> nodes[100]; /* 定义 */
...
int main() {
...
nodes[0].type = 0; /* 使用 */ /* 出错地点 */
...
return 0;
}
error:
error: 'class std::vector<node>' has no member named 'type'|
||=== Build: Debug in tmp (compiler: GNU GCC Compiler) ===|
C:\Users\main.cpp||In function 'int main()':|
C:\Users\main.cpp|28|error: 'class std::vector<node>' has no member named 'type'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
原因分析:
我本来是想通过 vector 定义一个一位的 vector 数组的, 但由于之前都是用的数组,就习惯性的在变量名后填了[100], 所以会出错。
定义 vector nodes[100]; 那 nodes
就相当于一个 二维数组
了。
在使用 nodes[0] 时, nodes[0]是一个结构体数组, 不是一个结构体实例。 结构体数组没有 type 这个变量,所以 nodes[0].type = 0会报错。
解决方案:
使用一维结构体:
定义 vector<node> nodes;
或 node nodes[size];
。
使用 不用修改
。
使用二维结构体:
定义 vector<node> nodes[size];
或 node nodes[size][size];
。或 vector<vector<node>> nodes
。
使用 需要修改
将 nodes[index].type = 0 修改为 nodes[index_1][index_2].type = 0。