当前正在学习一些c ++,并且不确定为什么这给了我“表达式必须具有指针类型”。
Mapp.hpp
class RouteMap
{
public:
RouteMap();
string getCurrent_();
void StoreCity(string b);
private:
std::vector<string>* cities();
string current_;
};
mapp.cpp
RouteMap::RouteMap(){}
string RouteMap::getCurrent_()
{
return current_;
}
void RouteMap::StoreCity(string b)
{
cities->push_back(b); //Error
}
std::vector<string> RouteMap::cities()
{
return std::vector<string>();
}
我试图将向量城市作为私有成员,以便在运行成员函数StoreCity(string x)时,它将把特定的字符串推回城市。
答案 0 :(得分:2)
我要刺一下,说问题是cities()
是一个函数,需要括号:
cities()->push_back(b);
编辑:刚刚找到了cities()
的实现(对不起,我)。您还有另一个问题,那就是您的声明和实现不匹配。
// declaration
std::vector<string>* cities();
// implementation. Notice the lack of a pointer type return
std::vector<string> RouteMap::cities()
{
return std::vector<string>();
}
您每次都返回一个新向量也很奇怪。您可能想要一个成员变量:
class RouteMap
{
//...
private:
std::vector<string> my_cities;
//...
};
,然后从那里返回成员变量:
std::vector<string>* RouteMap::cities()
{
return &my_cities;
}
Edit2 :引起我注意的是,尽管您可以像这样修复这些问题并使其正常工作,但事实是您可能并不意味着{{1} }完全是一个功能。您可能想让它成为成员变量,而不是:
cities()
这不需要任何实现(又名class RouteMap
{
//...
private:
std::vector<string> cities;
//...
};
),并且您可以在任何成员函数(因为它是私有成员)中使用它,例如current _。