我有一个列表列表:
int* adj;
std::list<int> adj[n];//where n is the size of the array
我的问题是,当我需要
adj[v].size()
,其中v是我当前所在的索引时,出现错误:request for member 'size' in '((GenericClass*)this)->GenericClass::adj', which is of non-class type 'int*' for(int i=0; i<adj.size(); ++i)
我尝试在STL List类中访问的每个其他函数也类似地遇到此问题。我也尝试创建一个迭代器:
for(std::list<int>::iterator it=adj[v].begin(); it != adj[v].end(); ++it)
但我遇到了与前面所述相同的问题。
编辑:在我班的私人课上,我有:
int *调整
然后在我的功能之一中,当我从用户那里获得数组的大小后,
std::list<int> adj[n]
行。编辑2:
我现在将我的私人信息更改为:
typedef std::list<int> IntList; typedef std::vector<IntList> AdjVec; AdjVec adj;
我在公共环境中有一个函数int GenericClass :: search(AdjVec adj,int v)
我得到一个错误
'AdjVec' has not been declared int search(AdjVec adj, int v); ^GenericClass.cc:234:20: error: no matching function for call to 'GenericClass::search(GenericClass::AdjVec&, int&)' u= search(adj, v);
最佳答案
您正在尝试访问size()
上的成员方法int
。
int* adj;
您已经为变量
adj
重新定义(或未定义列表)。编译器认为您在说的是int* adj
而不是std::list<int> adj[n];
摆脱第一个定义,然后使用第二个。
编辑:
似乎您不知道在编译时
n
是什么,并且adj
是您的一个类的成员。在这种情况下,只需使用vector
并在运行时动态调整其大小。// In your header.
typedef std::list<int> IntList;
typedef std::vector<IntList> AdjVec;
AdjVec adj;
// In your cpp, when you know what 'n' is.
adj.resize(n);
adj[0].size();
关于c++ - STL列表数组不访问列表功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22774501/