将对象添加到向量时出现C ++错误

时间:2011-12-21 21:03:51

标签: c++ vector compiler-errors syntax-error

我是向量的新手。我正在尝试将对象添加到矢量中。但程序无法编译,因为我的代码有问题。但我不知道它是什么。错误是:

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);)。

我放弃了试图找到解释如何添加对象的教程(在做这些事情时我很容易放弃......)。

'Line(void)'和'Line&amp;&amp;'是什么?意思? 'Line(void)'是'Line'类吗?如果是这样,在这种情况下'(void)'是什么意思?

3 个答案:

答案 0 :(得分:6)

Line help_line ();

这声明了一个函数,而不是Line。请改用Line help_line;

请参阅:Most vexing parse: why doesn't A a(()); work?

答案 1 :(得分: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);

答案 2 :(得分: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代码交互时有时需要这样做。)