【问题标题】:C++ Error when adding objects to vector将对象添加到向量时出现 C++ 错误
【发布时间】:2012-01-25 15:33:50
【问题描述】:

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

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 &&' 是什么意思? “线(空)”是“线”类吗?如果是这样,在这种情况下 '(void)' 是什么意思?

【问题讨论】:

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


    【解决方案1】:
    Line help_line ();
    

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

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

    【讨论】:

    • 除了这种情况比通常认为的“最麻烦的解析”更简单。
    • @Karl:不是所有的变量声明都被解释为被称为“令人烦恼的解析”的函数声明吗?
    • 我认为@Karl 是对的——据我所知,最令人头疼的解析是Line help_line(Line());,其中构造函数参数会导致歧义。
    • 我们可以就“相当令人头疼的解析”达成一致吗? :-)
    【解决方案2】:

    您已将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】:
      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 &amp;&amp;push_back 所期望的参数类型。 &amp;&amp; 在这里并不重要。对于初学者来说,最好将其视为一种调用约定。你仍然只是传递了一个Line,因为这是你在Lines 的向量中收集的那种东西。

      Line(void) 是“不带参数并返回Line 实例的函数类型”。 (void) 是编写 () 的另一种方式,用于函数参数(在新代码中不鼓励使用,但在与非常旧的 C 代码交互时有时需要)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        相关资源
        最近更新 更多