C ++类向量错误,表达式必须具有指针类型

时间:2019-04-18 16:50:49

标签: c++

当前正在学习一些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)时,它将把特定的字符串推回城市。

1 个答案:

答案 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 _。