首页 > 解决方案 > C++ 类向量错误,表达式必须有指针类型

问题描述

目前正在学习一些 c++ 并且不确定为什么这给了我“表达式必须具有指针类型”。

映射.hpp

class RouteMap
{
public:
    RouteMap();
    string getCurrent_();
    void StoreCity(string b);
private:
    std::vector<string>* cities();
    string current_; 
};

映射文件

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>();
}

我试图将向量 Cities 作为私有成员,这样当我运行成员函数 StoreCity(string x) 时,它会将特定字符串 push_back 到 Cities 中。

标签: c++

解决方案


我要试一试,说问题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;
}

编辑2:我注意到你可能,虽然你可以像这样修复这些东西并让它工作,但事实是你可能根本不想cities()成为一个函数。您可能的意思是让它成为一个成员变量:

class RouteMap
{
//...
private:
std::vector<string> cities;
//...
};

这不需要实现(又名RouteMap::cities(){}),您可以在任何成员函数(因为它是私有成员)中使用它,例如 current_。


推荐阅读