我正在Location类中创建一个Location类的指针成员向量,所以:
class Location //(simplified to prevent long code)
{
private:
std::string name, description;
int id;
std::vector<Item> items;
public:
Location();
~Location();
std::vector<Location*> nextLocations; //vector of pointers
};
为什么我的代码用
编译std::vector<Location*> nextLocations;
但不使用
std::vector<Location> *nextLocations;
有什么区别?我以为
int* i;
和
int *i;
是一样的吗?该向量还是不是位置指针的向量?除非参数将地址输入到某个位置,然后在nextLocations上执行push_back,否则我在Location类中名为addLoc()的成员函数将无法工作。但是当我push_back时,为什么必须使用
nextLocations.push_back(&location);
不是
nextLocations->push_back(&location);
nextLocations的每个元素都不应该是指针吗?
答案 0 :(得分:2)
是的,int* i;
和int *i;
是同一回事。但是,例如,括号外的内容(或等效内容)不相同。所以,
myfunc(i) + 7;
与
不同myfunc(i + 7);
像括号一样思考<>
。因此:
std::vector<Location *> nextLocations;
不同于:
std::vector<Location> *nextLocations;
如果您混淆了区别,那么第一个是位置指针的向量。第二个是指向位置向量的指针,该向量也不相同。确保选择正确的一个: