Ошибки C2664 и E0167, поставленные в тупик

Я беру дистанционный класс для начинающих с ++ и не могу решить эту ошибку компиляции. Он написан точно так же, как в примере книги, и когда мой брат вырезает и вставляет его в свой VS2015, он работает нормально, но в моем VS2017 это не так.
Я удалил и переустановил сообщество VS2017 безрезультатно.

Я занимаюсь программированием только 2 недели, поэтому я очень, очень новичок в этом.

Коды ошибок, которые я получаю:

ошибка E0167 Аргумент типа «const char» несовместим с параметром типа «char
ошибка C2664 void Hello (char): невозможно преобразовать аргумент 1 из const char [8] в char

Код:

// FUNCTION: Hello, prints out a welcome message on the screen.
void Hello(char* name)
{
cout << "Hello " << name << "!";
}

// FUNCTION: Main, program start.
int main()
{
Hello("Krister");
cin.get();
return 0;
}

Я действительно надеюсь, что кто-то может помочь мне с этим.

Всего наилучшего,
Jepp

1

Решение

Строковый литерал может быть указан как const char*,

Это не может быть упомянуто char*; это было возможно в старых версиях C, и некоторые старые компиляторы C ++ допускали это с предупреждением. В наше время это полностью запрещено.

Мимоходом "Krister" для принятия функции char*, вы просите компилятор попытаться преобразовать одно в другое; Это происходит из-за вышеуказанного правила, о чем свидетельствует сообщение об ошибке.

Чак const там для большого успеха.

Если этот код взят из учебника, потерять его. Вот список хороших книг по C ++.

6

Другие решения

Просто чтобы дополнить ответ Гонки легкости на орбите, который описывает то, что вы определенно следует сделать. Причина различия между VS2015 и VS2017 заключается в том, что /permissive флаг по умолчанию выключен, в отличие от первого.

Это означает, что VS2017 вполне может отклонить код, который принимает VS2015 «вашего брата», если только не опробованы варианты проекта.

Я рекомендую вам держать флаг в выключенном состоянии. Строгое соответствие — это хорошо, оно заставляет вас приобретать лучшие привычки и писать более переносимый C ++.

4

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector