#c #arrays #function #class #visual-studio-2017
#c #массивы #функция #класс #visual-studio-2017
Вопрос:
Я пытаюсь настроить функцию, которая использует несколько массивов для создания колоды карт из частного раздела в классе. Функция все еще находится в том же классе, но находится в общедоступном разделе. Однако отладчик Visual Studio сообщает мне, что нет подходящей функции для преобразования строки в символ. У меня нет никаких переменных char в моем коде, и я не пытаюсь его преобразовать. Оба массива являются строками.
Первоначально это был 2d-массив, переходящий в 1d-массив, но я изменил его на 2 отдельных массива, чтобы посмотреть, сработало ли это, но он все еще говорит мне, что я пытаюсь преобразовать.
class Cards {
private:
string deckcontents[13]{"A","2","3","4","5","6","7","8","9","10","J","K","Q"};
string cardshape[4]{ "H", "S", "D", "C" };
string deck[52]{};
public:
int generaterandcardnum() {
int num1 = NULL;
for (int i = 0; i < 13; i ) {
num1 = rand() % 10;
}
return num1;
}
int generaterandcardsuit() {
int num2 = NULL;
for (int i = 0; i < 4; i ) {
num2 = rand() % 10;
}
return num2;
}
void builddeck(string cards)
{
int cardnum = generaterandcardnum();
int cardsuit = generaterandcardsuit();
string card = deckcontents[cardnum] cardshape[cardsuit];
int j = 0;
for (int i = 0; i < 4; i ) {
for (int k = 0; k < 13; k ) {
//This is where the problem lies
cards[j] = card;
//.cpp(58): error C2440: '=': cannot convert from 'std::string' to 'char'
j = j 1;
}
}
return;
}
};
Комментарии:
1. Это не отладчик, который вам что-то говорит, это компилятор, отказывающийся компилировать ваш код; это справедливо. Как именно вы ожидаете, что это сработает?
cards
это строка.cards[j]
является j -м символом в этой строке.card
это строка. Вы не можете назначить целую строку одному символу другой строки…2. Послушайте, что говорит вам ваш компилятор
"cannot convert from 'std::string' to 'char'"
… кажется, действительно понятно, почему компилятор жалуется… Смотрите, как отлаживать небольшие программы3. Дэвид, я понимаю, что вы имеете в виду, но когда дело доходит до попытки увидеть проблему с моей точки зрения, я был смущен тем, почему он говорил мне, что у меня не было намерений конвертировать.
Ответ №1:
Вы пытаетесь получить доступ к символу в строке с cards[j]
помощью because cards
— это строка.
Чтобы получить доступ к определенной карте в массиве, вам необходимо изменить подпись вашей функции:
void builddeck(string cards[])
Комментарии:
1. Lol спасибо, я понял это после публикации. Только что проверил сегодня, и все прошло хорошо.