我有这个代码,在我看来,它收到了一个名为Vehicle的项目,它必须将它存储在一个名为Node的数组中。这是与该程序的这一部分相关的代码:
void Table::process(Vehicle v, int cont) {
char a='A'+cont;
putVehicle(a,v);
Node.a_v[cont]=v;
if(cont==0) a_surt=v.rowVehicle();
}
这就是我在Table.h的私有部分上使用数组的方法:
struct Node{
Vehicle a_v;
};
我得到的错误是:
error: expected primary-expression before '.' token
我有我需要的包含,但每次输入时都会这样:Node.a_v
它给了我这个错误。
有什么建议吗?
答案 0 :(得分:4)
如果要使用结构,则需要在使用之前声明Node
。此外,结构需要包含一个数组(或者更好,查看 vectors 以获得更大的灵活性。)
struct Node {
Vehicle[10] a_v; // 10 is max number of Vehicles in array
};
Node myNode;
myNode.a_v[cont] = v;
请记住,如果您希望保留此Node
并在其中放入更多内容,则需要在正确的范围内声明它。例如,要让process
函数向函数Vehicle
之外的Node
添加process
,您可以这样:
void Table::process(Node n, Vehicle v, int cont) {
char a = 'A'+cont;
putVehicle(a,v);
if (cont < 10) {
n.a_v[cont] = v;
}
if (cont == 0) a_surt = v.rowVehicle();
}
看起来你只是想尝试使用数组。在这种情况下,你正在寻找这样的东西:
// This would go somewhere in your program. Again, 10 is just an example.
Vehicle vehicleArray[10];
// Send this array to this function
void Table::process(Vehicle[] vArray, Vehicle v, int cont) {
char a = 'A'+cont;
putVehicle(a,v);
if (cont < 10) { // In a real program, don't hard-code array limits.
vArray[cont] = v;
}
if (cont == 0) a_surt = v.rowVehicle();
}
答案 1 :(得分:3)
您应该使用Node
对象来访问a_v
变量。这一行
Node.a_v[cont]=v;
不正确。你应该这样做:
Node n;
n.a_v[cont]=v;
答案 2 :(得分:2)
每次我输入这个:Node.a_v它给了我那个错误。
Node
是一种类型; types定义了对象的结构,但是它们没有自己的字段(static
字段除外,它们同时属于所有实例;无论如何都以不同的方式访问它们。)< / p>
要使用.
或->
运算符,您需要Node
的实例,如下所示:
Node x;
x.a_v = ...
但是,在您的情况下,Node
实例应该从何处开始并不清楚。为了访问它们,您需要将它们作为参数传递,或者使它们静态/全局可用(不推荐)。
答案 3 :(得分:0)
好的,所以Node不是你的数组的名字。它是应该包含数组的用户定义类型的名称。但是,您的节点不包含数组。它包含一个名为a_v的Vehicle。我假设a_v应该代表一个车辆阵列。因此,您需要分配数组。像这样:
struct Node {
Vehicle a_v[AMOUNT];
};
如果您在编译时不知道您希望数组有多大,那么必须动态分配它们,如下所示:
struct Node {
Vehicle* a_v;
Node() {
a_v = new Vehicle[AMOUNT];
}
};
如果它是动态分配的,那么它也必须被解除分配:
struct Node {
Vehicle* a_v;
Node() {
a_v = new Vehicle[AMOUNT];
}
~Node() {
delete[] a_v;
}
};
如果它是动态分配的,则需要添加复制或禁用复制的规定:
struct Node {
Vehicle* a_v;
Node() {
a_v = new Vehicle[AMOUNT];
}
~Node() {
delete[] a_v;
}
// Disable copies (with C++11 support):
Node(const Node&) = delete;
Node& operator=(const Node&) = delete;
// Disable copies (without C++11 support) by making them private and not defining them.
private:
Node(const Node&);
Node& operator=(const Node&);
};
然后要访问其中一辆车,你需要这样做:
Node n; // Declare a node, which contains an array of Vehicles
n.a_v[cont] = v; // Copy a Vehicle into the array of Vehicles
但是,请注意,如果在此函数中声明Node实例,则它是本地的,并且一旦函数结束它将超出范围。如果要将Node实例保留在函数调用之后,则需要将Node实例声明为Table的成员。
class Table
{
private:
Node n;
};
最后,正如其他人所建议的那样,我强烈建议你阅读一本C ++书来学习C ++。我的个人推荐是this book(第5版,不要购买第6版或第7版 - 这些版本的作者很糟糕)。