2013-12-11 2 views
-3

Я новичок в C++, и это ошибка, которую я продолжаю получать, и я понятия не имею, что это такое. В нем говорится, что на дисплее . Он имеет эту ошибку Неверное преобразование из 'char' в 'char *' [-fpermissive] | Могу ли я узнать, в чем смысл этой ошибки и как ее решить?Ошибка: неверное преобразование

void passChar() 
{ 
    char letter[] = {'H','E','L','L','O','!'}; 
    for(int i = 0; i<6; i++) 
    { 
     while(true) 
     { 
      display(letter[i]); 
      swapLetter(letter[i]); 
     } 
    } 



} 

Вот моя функция

void display(char letter[]) 
{ 
    for(int i = 0 ; i<6 ; i++) 
    { 
     switchStatement(letter[i]); 
    } 
} 

дисплей Вот моя функция swapletter

void swapLetter(char letter[]) 
{ 
    char temp = letter[0]; 
    for(int i = 1; i < 6; i++) 
    { 
     letter[i-1] = letter[i]; 
    } 
    letter[5]= temp; 
} 

Моя цель иметь бесконечный цикл для слова привет.

+0

«в функции строке дисплея» и может размещать функцию отображения слишком – OOkhan

+1

Прежде всего, вы должны показать нам прототипы 'display' и' swapLetter'. Кроме того, даже если вы его скомпилируете, вы застряли в своем 'while (true)' -endless-loop – Toby

ответ

0

Ваш код является недействительным в целом, поскольку этот цикл

while(true) 
    { 
     display(letter[i]); 
     swapLetter(letter[i]); 
    } 

бесконечен, если ни на дисплее, ни на swapLetter нет вызова выйти.

Что касается ошибки, то из сообщения об ошибке видно, что функция ожидает получить некоторую строку вместо символа. Поэтому его параметр объявляется как char s [] или char * s, или const char s [], или const char * s и т. Д. И даже если вы передадите ему свою букву массива, это будет ошибкой, потому что ваш массив не имеет нулевого конца.Я думаю, вы должны объявить массив в качестве

char letter[] = {'H','E','L','L','O','!', '\0'}; 

Или дисплей функция должна быть объявлена ​​как

void display(char c); 
+0

char letter [] = "HELLO!"; является идиоматическим способом –

0

Это значит, что вы передаете char в качестве параметра функцию, ожидающая char*.

Ваши функции на самом деле ожидают, что вы передадите всю строку, а не один символ. Так что ваш код должен быть:

display(letter); 
swapLetter(letter); 

Конечно, я подозреваю, что делает внешний цикл в passChar бессмысленный. И бесконечный цикл while(true) кажется странным, хотя вы заявляете в вопросе, что он преднамерен. В этом случае код должен гласить:

void passChar() 
{ 
    char letter[] = {'H','E','L','L','O','!'}; 
    while(true) 
    { 
     display(letter); 
     swapLetter(letter); 
    } 
} 

Лично я думаю, что я бы код display и swapLetter принимать char* и использовать нуль-терминатор для определения длины.

void passChar() 
{ 
    char letter[] = "HELLO!"; 
    while(true) 
    { 
     display(letter); 
     swapLetter(letter); 
    } 
} 

, а затем изменить display и swapLetter использовать нуль-терминатор, чтобы найти конец строки.

0

Предположительно, потому что ваша display() функция выглядит следующим образом:

void display(char* value) 
{ } 

letter[i] имеет тип char, выше функция ожидает char* ...

+0

. Я добавил свою функцию отображения выше. Пожалуйста, посмотрите – user3084845

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