C++是我引用一个函数或数据成员? (必须调用非静态成员函数引用)
问题描述:
我有一个类,它有一个拥有n个集合的向量成员。我想通过公共成员函数访问此成员,将项目插入到集合中并查找集合中的项目。但是编译时出错:引用非静态成员函数必须调用。C++是我引用一个函数或数据成员? (必须调用非静态成员函数引用)
但我真的很困惑,因为我不认为我引用了一个成员函数,我想我试图访问一个向量成员。
我在做什么错?
#include <vector>
#include <set>
#include <iostream>
class Foo {
public:
std::vector <std::set<int>> entities(int x);
int find(int x, int y);
void insert(int x, int y);
Foo(int x);
};
Foo::Foo(int x) {
std::vector <std::set<int>> entities(x);
};
void Foo::insert(int x, int y) {
entities[x].insert(y); // << This causes error
};
int Foo::find(int x, int y) {
std::set<int>::iterator iter = entities[x].find(y); // << This causes error
int found;
if (iter != entities[x].end()) { // << This causes error
found = *iter;
}
return found;
};
int main() {
std::cout << "Hello World!" << std::endl;
return 0;
}
答
在类定义中,std::vector <std::set<int>> entities(int x);
声明了一个成员函数,该函数采用int
参数并返回std::vector <std::set<int>>
。
在构造函数中,std::vector <std::set<int>> entities(x);
声明了一个局部变量。
成员函数是“实体”在其他成员函数中引用的内容。
如果你想有一个成员变量所谓的“实体”,写
std::vector <std::set<int>> entities;
类定义,并在初始化器列表初始化它:
Foo::Foo() : entities(x)
{
}
,或者,如果大小ISN “T在该点已知的,调整它在构造体:
Foo::Foo()
{
entities.resize(x);
}
答
您不能在类定义中使用括号来初始化数据成员。以下行将被视为函数声明。
std::vector <std::set<int>> entities(int x);
相反,您可以使用构造函数初始化数据成员。
ö你的错误是什么? –
最好提供一个MCVE(请参阅帮助)。使我们更容易查明问题。 –
“entries”和“entities”是同一个东西还是两个不同的东西? –