C错误:类型名称需要指定符或限定符

时间:2020-08-19 08:50:13

标签: c cs50

我试图创建一个包含动态数组的结构:

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;

但是我明白了 错误:类型名称需要指定符或限定符

4 个答案:

答案 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. 下一步是如何对其进行定义。
  3. 下一步是如何声明,定义,创建,存储,修改或销毁动态数组(生命周期)。执行过程中要注意错误。用C语言创建事物的快乐之路不是唯一的一条,那里有很多错误!
  4. 下一步是如何将它们插入到typedef结构中。
  5. 最后一步是使用带有内部动态数组的typedef结构。甚至您都可以在结构中创建多个动态数组!

注意:步骤1、2和4可能以其他方式进行排序,具体取决于程序员

没有捷径,没有反复试验,当然,您必须创建测试程序以确保所需的内容和编程的内容相同。

答案 3 :(得分:0)

n = calloc(MAX, sizeof(int)); 
int counter = 0;

您不能使用语句在结构的声明内执行。定义了n的对象后,您需要在函数内部初始化counternode

例如:

typedef struct
{
    int idNode;
    int* n; 
    int counter;
}
node;

int main (void) 
{
    node a;
    a.n = calloc(MAX, sizeof(int));
    a.counter = 0;  
}