我试图创建一个包含动态数组的结构:
typedef struct
{
int idNode;
int* n; //pointer to the int nodes in the dynamically created array of nodes
n = calloc(MAX, sizeof(int)); //dynamic array to store the loser member of the pair
int counter = 0;
}
node;
但是我明白了 错误:类型名称需要指定符或限定符
答案 0 :(得分:1)
您不能在结构声明中为n
分配值。您需要提供一个函数(类似构造函数;-)来初始化结构并为其成员分配值,包括n
:
void init_node(node* n)
{
n->idNode = ...;
n->n = calloc(MAX, sizeof(int));
n->counter = 0;
}
注意:您仍然需要处理该函数中的错误(例如calloc
可能会失败)并将错误传播给其调用者。
答案 1 :(得分:1)
您不能在结构内包含语句或初始化变量。
为解决您的问题
typedef struct Node {
int idNode;
int* n; //pointer to the int nodes in the dynamically created array of nodes
int counter;
} node;
int main(void)
{
node data = null;
node.n = calloc(sizeof(int), MAX);
node.idNode = 0;
node.counter = 0;
return (0)
}
现在您已经初始化了结构
答案 2 :(得分:0)
我试图创建一个包含动态数组的结构
我在最初的代码段中看到的问题是您混合使用了定义,声明和使用。 来自https://www.geeksforgeeks.org/difference-between-definition-and-declaration:
声明变量是为了向编译器通知以下信息:变量名称,其持有的值的类型以及初始值(如果需要)。即声明提供了有关变量属性的详细信息。而变量的定义说明了变量的存储位置。
注意:步骤1、2和4可能以其他方式进行排序,具体取决于程序员
没有捷径,没有反复试验,当然,您必须创建测试程序以确保所需的内容和编程的内容相同。
答案 3 :(得分:0)
n = calloc(MAX, sizeof(int));
int counter = 0;
您不能使用语句在结构的声明内执行。定义了n
的对象后,您需要在函数内部初始化counter
和node
。
例如:
typedef struct
{
int idNode;
int* n;
int counter;
}
node;
int main (void)
{
node a;
a.n = calloc(MAX, sizeof(int));
a.counter = 0;
}