2016-11-08 4 views
-2

Компиляция этого сегмента кода с использованием функции push_back для векторов заканчивается ошибкой.Ошибка push_back при компиляции

for (int i=0; i<=n; i++) 
{ 
    if(i==0) 
    { 
     Profit[i].push_back(0); 
     Weight[i].push_back(0); 
     Name[i].push_back(""); 
    } 
    else 
    { 
     Profit[i].push_back(tosteal[i-1].getProfit()); 
     Weight[i].push_back(tosteal[i-1].getWeight()); 
     Name[i].push_back(tosteal[i-1].getName()); 
    } 
} 

Вес и прибыль объявляются векторами типа данных int, а Name - вектором строкового типа данных. tosteal - массив объектов. getProfit() и getWeight() возвращают int и getName() возвращает строку.

Эти ошибки компилятор дает, некоторые повторы:

joulethiefdynamicrefined.cpp: 167: ошибка: запрос члена 'push_back' в «Profit.std :: вектор < _Tp, _Alloc> :: оператор [] [с _Tp = int, _Alloc = std :: allocator] (((long unsigned int) i)) ', который относится к неклассическому типу' int ' joulethiefdynamicrefined.cpp: 168: error: request for member' push_back 'в' Weight.std :: vector < _Tp, _Alloc> :: operator [] [с _Tp = int, _Alloc = std :: allocator] (((long unsigned int) i)) ', который не имеет значения, class type 'int' joulethiefdynamicrefined.cpp: 169: ошибка: неверное преобразование из 'const char *' в 'char' joulethiefdynamicrefined.cpp: 169: error: инициализировать аргумент 1 из 'void std :: basic_string < _CharT, _Traits, _Alloc> :: push_back (_CharT) [с _CharT = char, _Traits = std :: char_traits, _Alloc = std :: allocator] ' joulethiefdynamicrefined.cpp: 173: error: запрос для члена' push_back 'в' Profit.std :: vector < _Tp, _Alloc> :: operator [] [с _Tp = int, _Alloc = std :: allocator] (((long unsigned int) i)) ', который относится к неклассическому типу' int ' joulethiefdynamicrefined.cpp: 174: ошибка: запрос для члена' push_back 'в' Weight.std :: vector < _Tp, _Alloc>: : operator [] [with _Tp = int, _Alloc = std :: allocator] (((long unsigned int) i)) ', который относится к неклассическому типу' int ' joulethiefdynamicrefined.cpp: 175: error: no matching функция для вызова 'std :: basic_string, std :: allocator> :: push_back (std :: st кольцо) ' /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/basic_string.h:914: примечание : кандидаты: аннулируются станд :: basic_string < _CharT, _Traits, _Alloc> :: push_back (_CharT) [с _CharT = голец, _Traits = станд :: char_traits, _Alloc = станд :: распределитель]

+1

Не то, что вы просите, но диапазон 'i' в' for (int i = 0; i <= n; i ++) 'не кажется правильным. –

+0

_Weight и Profit объявлены векторами типа данных int _... ok, так зачем вам нужно «Вес [i] .push_back'? – smac89

ответ

5
Profit[i].push_back(0); 

в случае, если be

Profit.push_back(0); 

И так далее. Profit - это сам вектор; говоря Profit[i].push_back(0), вы пытаетесь подтолкнуть что-то к одному из элементов, который уже находится в векторе, а не толкать что-то в вектор.

Поскольку тип элемента int, Profit[i] имеет тип int, поэтому вы получите ошибку: request for member ‘push_back’ in [...] which is of non-class type ‘int’.

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