无法插入std :: list吗?

时间:2018-12-03 16:02:03

标签: c++ std

我正在尝试将值插入到在void中调用的std :: list中。从另一个函数调用时,void将值插入到要使用的列表中,但是当我尝试使用.push_back,.Insert或.Add将值插入到列表中时,出现以下错误:I get the following error < / p>

这是我的代码:

void pb(std::list<unsigned long long int> primeFactorisation(unsigned long long int), int n)
{
    for (int i=n; i<n; i++)
    {
        primeFactorisation.push_back(i);
    }
}

我不明白我在做什么错,这是标准列表?

2 个答案:

答案 0 :(得分:6)

void pb(std::list<unsigned long long int> primeFactorisation(unsigned long long int), int n)

您的第一个参数

std::list<unsigned long long int> primeFactorisation(unsigned long long int)

声明一个函数,而不是std::list参数。您需要

void pb(std::list<unsigned long long int>& primeFactorisation, int n)

为使pb正常工作(请注意,primeFactorisation需要通过引用传递,以修改从呼叫站点传递的列表)。


您的for循环也有问题。

for (int i=n; i<n; i++)

永远不会在第一个循环中以i == n的身份运行,因此i < n将是false,甚至是您开始之前。

答案 1 :(得分:2)

尝试:

void pb(std::list<unsigned long long int>& primeFactorisation, int n)
{
    for (int i=0; i<n; i++)
    {
        primeFactorisation.push_back(i);
    }
}

由于包含primeFactorisation,因此您的初始版本几乎被格式化为接受称为(unsigned long long int)的函数。

正如@FrançoisAndrieux指出的那样,该列表需要通过引用或指针进行传递,否则将创建一个临时副本,并且您的push_back()都不会影响调用者传递的原始列表。

此外,您将在永远不会执行的点开始for循环。

for(int i=n;i<n;i++)

可以改写为:

i=n;  // ok
is i < n? // nope, since you just set i=n.

相反,请在i=0的第一部分中设置for