2014-12-10 2 views
-1

Итак, у меня есть эта программа, которая просит пользователя ввести 5 догадок для колоды из 18 карт. Угадывая их, я должен отображать как пользовательские догадки, так и посещенные сгенерированные компьютеры. Это мой код, и я получаю эту ошибкуDisplayCards Func: Получение ошибки

309 34 [Error] conversion from 'std::string [19] {aka std::basic_string<char> [19]}' to non-scalar type 'std::string {aka std::basic_string<char>}' requested 
void DisplayCards(int* user, int* generatedCards) 
{ 
    cout << "Users Guess" << "\t\t\t" << "Generated Cards" << endl; 
    for (int i = 0; i < 5; ++i) 
    { 
     // Get the names of the choices from the deck 
     std::string UserChoice = CARDS; 
     std::string GeneratedCard = CARDS; 
     // print the names side by side 
     cout << UserChoice << "\t\t\t" << GeneratedCard << endl; 
    } 

Мои CARDS являются глобальным, как:

std::string CARDS[19] = {"nothing","red circle","red square","red triangle","blue circle","blue square", 
"blue triangle","yellow circle","yellow square","yellow triangle","orange circle", 
"orange square" ,"orange triangle","purple circle","purple square", 
"purple triangle","green circle","green square","green triangle"}; 

std::string CARDS[19]={"nothing","red circle","red square","red triangle","blue circle","blue square", 
"blue triangle","yellow circle","yellow square","yellow triangle","orange circle", 
"orange square" ,"orange triangle","purple circle","purple square", 
"purple triangle","green circle","green square","green triangle"}; 
+2

'UserChoice' - это' std :: string' и 'CARDS' - это массив' std :: string '... ваше назначение является фиктивным. –

+0

Любые идеи, чтобы исправить это? Я знаю его фиктивный lol Я новичок в C++ –

ответ

0

Ваша ошибка будет исправлена ​​путем рассмотрения этих заявлений:

std::string UserChoice = CARDS; 
std::string GeneratedCard = CARDS; 

Вам необходимо индексировать массив, чтобы получить правильное значение для этих переменных.

Ваши параметры функции предназначены для массивы, содержащие пять догадок и сгенерированные карты, поэтому ваша функция становится:

void DisplayCards(int* user, int* generatedCards) 
{ 
    cout << "Users Guess" << "\t\t\t" << "Generated Cards" << endl; 
    for (int i = 0; i < 5; ++i) 
    { 
     // Get the names of the choices from the deck 
     std::string UserChoice = CARDS[user[i]]; 
     std::string GeneratedCard = CARDS[generatedCards[i]]; 
     // print the names side by side 
     cout << UserChoice << "\t\t\t" << GeneratedCard << endl; 
    } 
} 

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

Надеюсь, это поможет.

+0

void DisplayCards (int *, int *); (15 баллов) DisplayCards передается с компьютера и на карты карт игрока. Он отображает два набора карт бок о бок, по цвету и форме, а не по целому числу! Не имеет цинов. Это идея для func. Я могу обращаться к ним только с помощью указателей и переходить только к указателям на эту функцию, если это поможет мне опубликовать весь мой код. Подсказка: используйте массив картографирования, чтобы найти целое число и получить строку, представляющую карту. –

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