【问题标题】:Error: expected identifier or ‘(’ before ‘->’ token in C错误:C 中“->”标记之前的预期标识符或“(”
【发布时间】:2021-10-03 21:22:37
【问题描述】:

我有一个结构,位于我的头文件中,我想将它的成员设置为我在 main() 函数中拥有的值,即“size”和“cap”。我得到以下信息:error: expected identifier or ‘(’ before ‘->’ token struct Array->size = size; 我也得到与“cap”行相同的错误。

我已经提供了我的头文件、结构所在的位置以及我的函数定义文件。

头文件:

#include <stdio.h>

struct Array {
  unsigned int size;
  unsigned int cap;
  int data;
};

struct Array *newArray(unsigned int size, unsigned int cap); //Prototype

函数定义文件:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

struct Array *newArray(unsigned int size, unsigned int cap) {

  struct Array->size = size;
  struct Array->cap = cap;

}

我故意不将我的头文件包含在我的函数定义文件中,因为我将它包含在我的主文件中。包含两次 header.h 会给我更多错误/警告。

有人可以帮忙吗?谢谢

【问题讨论】:

  • struct Array 是一种类型。您不能将值存储在类型中。首先创建该类型的实例(malloc 一些空间)。
  • struct Array 是类型的名称,而不是您可以使用 -&gt; 运算符的指针变量的名称。您需要先为struct Array 分配内存,然后使用指向该内存的指针。
  • 这能回答你的问题吗? How to initialize a pointer to a struct in C?
  • 你不是#include-ing你自己的头文件,所以结构的定义(甚至Array存在的类型)是未知的......它是#included在主文件中是无关紧要的。

标签: c struct


【解决方案1】:

您正在尝试将某些内容分配给确实有效的类型。

struct Array *newArray(unsigned int size, unsigned int cap) {

   struct Array->size = size;
   struct Array->cap = cap;

}

以下是修复代码的方法:

struct Array *newArray(unsigned int size, unsigned int cap) {
   struct Array *arr = malloc(sizeof(struct Array));
   if(!arr)
       return NULL;

   arr->size = size;
   arr->cap = cap;
   
   return arr;
}

【讨论】:

    【解决方案2】:

    您需要创建Array 结构的新实例,初始化其字段,并在newArray 函数中返回指向它的指针。

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    不要将所有头文件都包含在主文件中,而是将它们包含在一个包含所有功能的文件中,然后将所述头文件包含在主文件中,这两个文件中都不会出现两次相同的错误头文件,换取编译器调试时间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      • 2012-11-05
      相关资源
      最近更新 更多