2011-12-21 2 views
2

Я новичок в векторе. Я пытаюсь добавить объекты к вектору. Но программа не может скомпилироваться, потому что у меня есть проблема в коде. Но я не знаю, что это. Ошибка:C++ Ошибка при добавлении объектов в вектор

error C2664: 'void std::vector<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'Line (void)' to 'Line &&' 

Код:

Line help_line(); 
cin >> ln_quan; 
vector <Line> figure_line; 
for (int i = 0 ; i < ln_quan ; i++) 
{ 
    figure_line.push_back(help_line); 
} 

компилятор говорит, что ошибка в 6-й строке (figure_line.push_back (help_line);).

Я сдался, пытаясь найти учебник, объясняющий, как добавлять объекты (я легко сдаюсь при выполнении таких вещей ...).

А что означает «Линия (void)» и «Линия & &» означает? Is 'Line (void)' класс 'Line'? Если да, то что означает «(пустота)» в данном случае?

ответ

3
Line help_line(); 

Это не значит "help_line должен быть экземпляром Line с с конструктором по умолчанию ". Это означает, что «help_line должна быть функцией, реализованной где-то в другом месте, которая не принимает аргументов и возвращает экземпляр Line».

Вещь, которую вы хотите, написана Line help_line;, без круглых скобок.

Таким образом, вы получите следующее сообщение об ошибке:

'void std::vector<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'Line (void)' to 'Line &&' 

Line && является своего рода параметр, который push_back ожидает. && здесь не имеет никакого значения; это лучше всего для новичков, как своего рода конвенция о вызове. Вы все еще просто проходите Line, потому что это то, что вы собираете в векторе Line s.

Line(void) - это «тип функций, которые не принимают аргументов и возвращают экземпляр Line». (void) - это еще один способ написать (), для аргументов функции (он обескуражен в новом коде, но иногда необходим при взаимодействии с очень старым кодом C).

6
Line help_line(); 

Объявляет функцию, а не Line. Вместо этого используйте Line help_line;.

См: Most vexing parse: why doesn't A a(()); work?

+0

@OliCharlesworth: Я сделал :-) –

+1

За исключением этого более простого случая, чем обычно считается «самым неприятным анализом». –

+0

@Karl: Не все ли случаи, когда объявление переменной интерпретируется как объявление функции, известное как «досадный синтаксический разбор»? –

4

Вы объявили help_line как функция не принимает никаких параметров и возвращает Line. Это то, что вы намеревались?

Если да, то вам необходимо вызвать функцию, например:

Line help_line(); 
... 
figure_line.push_back(help_line()); 

Если нет, и вы намеревались объявить help_line как объект типа Line, вам это нужно:

Line help_line; 
... 
figure_line.push_back(help_line); 
Смежные вопросы