error: expected expression before ‘char’

error: expected expression before ‘char’

对不起,我在编译代码时遇到问题,我不知道如何解决它,因为我不知道它要求什么。

这出现在我的终端:

" usr/lib/gcc/x86_64-linux-gnu/4.9/../../../x86_64-linux-gnu/crt1.o: 在函数 _start': /build/buildd/glibc-2.21/csu/../sysdeps/x86_64/start.S:114: reference tomain' 中没有定义 collect2:错误:ld 返回 1 退出状态 "

我留下我的密码:

#include<stdio.h>
#include<string.h>
void calcular_vocal(char cadena[]){
   int l;
   char vocales[5]="a,e,i,o,u";
   int i, vector contadores[5];
   l=strlen(cadena);
   for(i=0;i<l;i++){
     if(cadena[i] =='a')
        cadena a++;
        vector contadores[0]++;
     if(cadena[i] =='e')
        cadena e++;
        vector contadores[1]++;;
     if(cadena[i] == 'i')
        cadena i++;
        vector contadores[2]++;
     if(cadena[i] =='o')
        cadena o++;
        vector contadores[3]++;
     if(cadena[i] =='u')
        cadena u++;
        vector contadores[4]++;
    for(i=0;i<5;i++){
      int max,pos;
      if(vector contadores[i]>max){
         max = vector contadores [i];
         pos = i;
      }
    }
     printf("The most repeated vocal is %c %d",vocales[pos],max);
   }
}
int main (void){
   char calcular_vocal(char[]);
}

更新

看来你编译的文件有误。请参阅以下控制台命令和输出(它是德语,但我认为该消息与您的非常相似):

$ rm test1.c 
$ touch test1.c
$ gcc test1.c 
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In Funktion `_start':
(.text+0x20): Nicht definierter Verweis auf `main'
collect2: error: ld returned 1 exit status
$ 

长话短说:您编译了错误的文件(可能是一个空文件),因此您收到此错误消息,这与您的任何代码都完全无关。


原答案

我将对您的代码进行一些假设,以便为您提供一个生成可编译代码的答案 - 运行 程序的结果是否意味着任何事情都取决于您(老实说,我有意建议的更改不会为您提供您最可能想要的程序,因为您需要学习一些东西)。

我从你的主要功能开始

int main (void){
   char calcular_vocal(char[]);
}

您在 main 函数中所做的是编写 calcular_vocal 函数的声明,但函数签名与您的实际实现不同。将其更改为 void calcular_vocal(char[]); 以使该部分可编译。

现在到 calcular_vocal 函数中的代码:

char vocales[5]="a,e,i,o,u"; 是不允许的,因为字符串对于您的数组来说太大了。将数组大小增加到 9 或 10 以获得足够的 space 可用:char vocales[9] = "a,e,i,o,u";

转到第 int i, vector contadores[5]; 行,假设您想要一个名为 "vector contadores" 的变量。您的变量名中不能包含 space,因此将所有出现的变量重命名为 "vector_contadores" 以使本文有效。

继续讨论所有 if-statements。它们都是一样的,所以我只写第一个。代码 cadena a++; 无效。你有多种选择来解决这个问题。 (1) 从该代码 (cadena++;) 中删除 a。 (2) 为 a 定义整数变量并从代码 (a++;) 中删除 cadena。 (3)改写为cadena['a']++;。还有更多选项可以使这部分可编译。

变量int max,pos;在for-loop内部定义,但在外部使用。将它们的定义移动到函数的顶部,您可以在其中定义其他变量。另外,用值 -1.

初始化 max

这应该是编译这段代码所需的全部内容(除非我忘记了什么)