我正在编写一个C ++程序,它将采用2个列表,L和P,并且我正在尝试编写一个方法来打印L中的元素,这些元素位于P中指定的位置。这是代码:
#include <iostream>
#include <list>
#include <iterator>
#include <stdlib.h>
using namespace std;
void printLots( list L, list P );
int main()
{
list< int > numList = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000};
list< int > indexList = {2, 4, 6, 8, 10};
printLots( numList, indexList );
return 0;
}
void printLots( list L, list P )
{
int count;
list::iterator itrIndex;
list::iterator itrValue;
for( itrIndex = P.begin(); itrIndex != P.end(); ++itrIndex )
{
count = 1;
for( itrValue = L.begin(); itrValue != L.end(); ++itrValue )
{
if( count == *itrIndex )
{
cout << "Value in list L at index " << *itrIndex << " = " << *itrValue << endl;
}
++count;
}
}
}
出于某种原因,当我尝试编译时,我收到一个错误说:"error: variable or field 'printLots' declared void
void printLots( list L, list P )
我的意思是,是的,函数是无效的,但那是因为它应该是。这个函数没有返回任何东西,所以我不知道为什么它给我一个错误,因为这个函数是无效的。我不知道如何解决这个问题。有什么帮助吗?
答案 0 :(得分:2)
在方法的参数中,两个参数的数据类型是一些没有数据类型的任意列表。您还必须为列表定义数据类型。
list<int>, list<double>, list<...>
答案 1 :(得分:1)
您的void printLots( list L, list P )
方法未指定列表类型。尝试void printLots(list<int> L, list<int>P);
您还必须指定实例化迭代器的列表类型。
如果你需要它来处理多种类型,你可以使printLots
成为模板化函数。
此外,您可能希望传递const list<int>&
以避免复制列表,因为您没有更改它们。