我正在尝试将值插入到在void中调用的std :: list中。从另一个函数调用时,void将值插入到要使用的列表中,但是当我尝试使用.push_back,.Insert或.Add将值插入到列表中时,出现以下错误: < / 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);
}
}
我不明白我在做什么错,这是标准列表?
答案 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
。