Irdia_36 Ответов: 2

Небольшое руководство для новичка


Я не понимаю, что проблема в моем коде, я не видел такой ошибки, поэтому не знаю, с чего начать ее отлаживать. Я учусь писать код на C++ только около месяца. Итак, проблема заключается в том, что "подходящей функции преобразования из const std::string в char не существует". в этой строке кода "horses[i].name = HorseNames[i];" под HorseNames.

редактировать:: Я добавляю декларацию

struct Horse
{
	char name;
	int distance;
	int eventOffSet;
	int ID;
};

        array <Horse, horseCount> horses;
	const string HorseNames[] = { "Black Beauty", "Sea Biscuit", "Bucephalus", 
                                      "Man o War", "Marengo", "Winning Colors" };

	horses[0].ID = 1;
	horses[1].ID = 2;
	horses[2].ID = 3;
	horses[3].ID = 4;
	horses[4].ID = 5;
	horses[5].ID = 6;


 for (int i = 0; i < horseCount; i++)
		{
			horses[i].name = HorseNames[i];
			cout << "These are the Galent Steeds racing today!: "  
                             <<  horses[i].name << endl;
		}


Что я уже пробовал:

Я погуглил его и ничего не смог найти, я попытался изменить свою строку const на статическую, переименовал ее в char, но ничего не получилось.

User 59241

Опубликуйте небольшой фрагмент кода, показывающий, где объявлены лошади и лошадиные имена.

2 Ответов

Рейтинг:
1

Jochen Arndt

Как уже предлагалось, вы должны показать декларацию tpyes.

Однако из сообщения об ошибке можно предположить нечто подобное:

std::string HorseNames[MAX_HORSES];
struct {
    char name;
    // Probably more members here
} Horses;
Horses horses[MAX_HORSES];
Затем HorseNames[i] это std::string которые не могут быть отнесены к одному char любить horses[i].name.

Вы, наверное, хотите Horses.name быть std::string тоже или А char массив. В последнем случае вы не можете использовать назначение, но должны скопировать строку:
char name[MAX_NAME_LEN];
// Use strncpy or a safe string copy method here to avoid buffer overruns
strncpy(name, HorseNames[i], sizeof(name) / sizeof(name[0]));
// NULL terminate when using strncpy and string is too long
name[sizeof(name) / sizeof(name[0]) - 1] = '\0';


Irdia_36

Мое понимание указателей не совсем ясно, мне нужно было бы поместить копию строки в цикл for each и указать на имя структуры?

Jochen Arndt

На самом деле у вас нет ни указателя, ни массива:
имя char;
это один символ.

Вам нужен массив символов (char name[SIZE]), где данные должны быть скопированы в него, или указатель (char *namePtr), где может быть назначен другой указатель. Но это будет работать только в том случае, если источник существует столько же, сколько и пункт назначения.

Рейтинг:
1

Richard MacCutchan

Вы не можете хранить string в char переменная; a char тип может содержать только один символ. Вам нужен либо указатель на строку (char*), или массив символов (char[]) как предположил Йохен выше.