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; 
} 
+0

ö你的错误是什么? –

+3

最好提供一个MCVE(请参阅帮助)。使我们更容易查明问题。 –

+0

“entries”和“entities”是同一个东西还是两个不同的东西? –

在类定义中,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); 

相反,您可以使用构造函数初始化数据成员。