C ++ Ошибка при добавлении объектов в вектор - PullRequest
2 голосов
/ 22 декабря 2011

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

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)» и «Линия &&»? Является ли 'Line (void)' классом 'Line'? Если так, что означает «(void)» в этом случае?

Ответы [ 3 ]

6 голосов
/ 22 декабря 2011
Line help_line ();

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

См .: Самый неприятный анализ: почему не A a (()); работа

4 голосов
/ 22 декабря 2011

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

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

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

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

Line help_line;
...
figure_line.push_back(help_line);
3 голосов
/ 22 декабря 2011
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).

...