VS 2017 говорит мне, что я пытаюсь преобразовать переменные, но я этого не делаю

#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 спасибо, я понял это после публикации. Только что проверил сегодня, и все прошло хорошо.