我正在尝试使用向量创建一个类数组,但我认为我在实例化数组时遇到了错误的语法。我得到的错误是:
error: request for member 'setX' in objects[0], which is of non-class type 'std::vector'
#include <iostream>
#include <vector>
using std::cout;
class A {
public:
void setX(int a) { x = a; }
int getX() { return x; }
private:
int x;
};
int main() {
std::vector<A> *objects[1];
objects[0].setX(5);
objects[1].setX(6);
cout << "object[0].getX() = " << objects[0].getX() << "\nobject[1].getX() = " << objects[1].getX() << std::endl;
}
答案 0 :(得分:5)
std::vector<A> objects; // declare a vector of objects of type A
objects.push_back(A()); // add one object of type A to that vector
objects[0].setX(5); // call method on the first element of the vector
答案 1 :(得分:1)
使用星号和方括号,您将声明一个指向矢量而不是矢量的指针数组。使用std::vector<T>
,您不需要方括号或星号:
std::vector<A> objects(2); // 2 is the number of elements; Valid indexes are 0..1, 2 is excluded
objects[0].setX(5); // This will work
objects[1].setX(6);
编译器认为您试图在setX
上调用vector
的原因是由向量重载的方括号运算符也是数组或指针上的有效运算符。
答案 2 :(得分:0)
数组和std::vector
是两种完全不同的容器类型。数组实际上是一个固定大小的内存块,其中 - std:vector
对象是动态顺序容器类型,这意味着它可以在运行时动态“增长”和“缩小”,并且对象本身管理它拥有的对象的内存分配。它们明显相似之处在于它们都可以访问O(1)复杂度的成员,并且可以使用括号语法来访问成员。
您想要的是以下内容:
int main()
{
//make a call to the std::vector<T> cstor to create a vector that contains
//two objects of type A
std::vector<A> objects(2);
//you can now access those objects in the std::vector through bracket-syntax
objects[0].setX(5);
objects[1].setX(6);
cout << "object[0].getX() = " << objects[0].getX() << "\nobject[1].getX() = " << objects[1].getX() << std::endl;
return 0;
}
答案 3 :(得分:-1)