2016-04-13 5 views
-3

Я считаю, что я делаю все правильно, но строка не заполняется символами, которые она назначена. Вот что я знаю, тестируя: random - правильный символ, q - правильный int, а s [i] .name - строка. Я попытался использовать .at (q) и [q], но ничего не работает.at() не работает в функции

Это моя ошибка:

Terminate вызывается после метания экземпляра 'станд :: out_of_range' , что(): basic_string :: на Abort (ядра) сбрасывали

for (int i = 0; i < num; i++) { 
    int q = 0; 
    char random = 50; 
    for (; random != 32;) { 
     file.get(random); 
     s[i].name.at(q) = random; 
     q++; 
    } 
    q = 0; 
} 
cout << s[0].name; 
+1

Как мне кажется, вы пытаетесь присвоить 'char' rval (и rval не существует). –

+1

Согласно вашей логике, 'q' может иметь большее значение, чем' s [i] .name' имеет символы. –

ответ

1

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

Кроме того, последняя строка аргумента является излишней, без установки точки q в 0, поскольку она уничтожается следующей строкой, а новый q выделяется в следующем цикле. Не говоря уже о том, что с push_back отслеживание индекса с q становится полностью избыточным. Наконец, for делает вещи излишне сложными, используйте, в то время как в этом случае вместо этого.

+0

Спасибо, простую ошибку я упустил. – Dent

0

Это трудно, потому что вы не дали нам полный код, но если я понимаю ваши намерения, вы должны быть в состоянии получить что-то вроде него с этим:

for (int i = 0; i < num; i++) { 
    char random = 50; 
    s[i].name = ""; 
    for (; random != 32;) { 
     file.get(random); 
     s[i].name += random; 
    } 
} 
cout << s[0].name; 

Если строка слишком коротка , at() выдает исключение. Использование конкатенации, как и я, должно обрабатывать произвольно большие строки.

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