2016-01-23 2 views
-1

Извините, у меня проблема при компиляции моего кода, и я не понимаю, как его решить, потому что я не знаю, о чем он просит.ошибка: ожидаемое выражение перед «char»

Это кажется мне в терминале:

"USR/Библиотека/GCC/x86_64-Linux-гну/4,9 /../../../ x86_64-Linux-гну/crt1.o: В функции _start': /build/buildd/glibc-2.21/csu/../sysdeps/x86_64/start.S:114: reference to основной без определения collect2: ошибка: л.д. возвращается статус 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[]); 
} 
+1

И это компилирует? – Andrej

+0

Нет, это проблема XD –

+1

Но это на самом деле код, который вы пропустили через компилятор? Поскольку кажется, что вы получаете ошибку компоновщика, в то время как компилятор не должен действительно компилировать ваш код: int i, vector contadores [5]; является незаконным. Что будет вектор? Вы также не инициализируете свои цели нигде, так что вы обязательно получите значения мусора. a, e, o и u также не объявлены. Вы объявили i, однако он предназначен как счетчик для вашего цикла. – Andrej

ответ

0

Update

Возможно, вы компилируете неправильный файл. Смотрите следующие консольные команды и вывод (его немецкой, но я думаю, что сообщение является достаточно похоже на вас):

$ 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[]); 
} 

Что вы делаете внутри основной функции, пишет объявление функции calcular_vocal, но с другой функцией подписью, чем ваша фактическая реализация. Измените его на void calcular_vocal(char[]);, чтобы эта часть была скомпилирована.

Теперь код внутри функции calcular_vocal:

char vocales[5]="a,e,i,o,u"; линия не допускается, так как размер строки является большим для вашего массива. Увеличьте размер массива до 9 или 10, чтобы иметь достаточно свободного места: char vocales[9] = "a,e,i,o,u";

Переходя к строке int i, vector contadores[5];, предполагая, что вы хотите иметь переменную с именем «cont contores». У вас не может быть места в именах переменных, поэтому переименуйте его в «vector_contadores» для всех случаев, чтобы сделать эту часть работы.

Переходя к всем операторам if. Они все одинаковые, поэтому я пишу только что-то о первом. Код cadena a++; недействителен. У вас есть несколько вариантов решения этой проблемы. (1) стереть a с этого кода (cadena++;). (2) определите целочисленную переменную для a и удалите cadena из кода (a++;). (3) переписать на cadena['a']++;. Есть еще больше возможностей для компиляции этой части.

Переменные int max,pos; определены внутри цикла for, но используются снаружи. Переместите их определение в начало функции, где вы определяете другие переменные. Также инициализируйте max со значением -1.

Это должно быть все, что вам нужно, чтобы скомпилировать этот кусок кода (если я что-то не забыл)

+0

OK Большое вам спасибо :) –

+0

_for_ '" a, e, i, o, u " '... _Ввести размер массива до 9 или 10_. Что это, 9 или 10? То, как вы это делаете ('vocales [9] =" a, e, i, o, u "') неверно, потому что не будет места для символа NULL. Безопасный вариант - предложить: 'char vocales [] =" a, e, i, o, u ";'. Это обеспечивает правильную инициализацию. (это будет 10 байтов). – ryyker

+0

@ryyker Хорошо, я мог бы перефразировать его, указав только размер 9, так как это минимально необходимый. Я также упомянул 10, потому что это фактический размер строки, включая нулевой конец. Я не упомянул, что допустим любой размер более 9 (не только 10). Мне не нравится идея опустить размер, так как для меня это подразумевает использование с учетом размера, что не так (не очень рационально, я знаю). Я подумаю об этом немного до редактирования;) – grek40

Смежные вопросы