我是向量的新手。我正在尝试将对象添加到矢量中。但程序无法编译,因为我的代码有问题。但我不知道它是什么。错误是:
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)'是什么意思?
答案 0 :(得分:6)
Line help_line ();
这声明了一个函数,而不是Line
。请改用Line help_line;
。
答案 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代码交互时有时需要这样做。)