我需要访问矢量指针元素,我的动画结构有以下代码(这里简化了,不必要的变量被截断):
struct framestruct {
int w,h;
};
struct animstruct {
vector<framestruct> *frames;
};
vector<framestruct> some_animation; // this will be initialized with some frames data elsewhere.
animstruct test; // in this struct we save the pointer to those frames.
void init_anim(){
test.frames = (vector<framestruct> *)&some_animation; // take pointer.
}
void test_anim(){
test.frames[0].w; // error C2039: 'w' : is not a member of 'std::vector<_Ty>'
}
阵列工作,我测试了它:
test.frames->size()
,按照我的计划,它是7。
那么如何在向量的第N个索引处访问向量元素(w和h)?
答案 0 :(得分:5)
您需要在访问数组之前取消引用指针。就像您使用->
运算符来获取大小一样。
(*test.frames)[0].w;
您可以使用->
运算符来访问[]
运算符方法,但语法并不好:
test.frames->operator[](0).w;
如果您希望能够在语法上直接使用[]
像真正的向量,那么您可以允许frames
成员获取vector
的副本,它可以参考vector
。或者,您可以对[]
本身上的animstruct
重叠,以使用[]
变量上的test
语法。
拷贝:
struct animstruct { vector<framestruct> frames; };
animstruct test;
void init_anim(){ test.frames = some_animation; }
test.frames[0].w;
参考:
struct animstruct { vector<framestruct> &frames;
animstruct (vector<framestruct> &f) : frames(f) {} };
animstruct test(some_animation);
void init_anim(){}
test.frames[0].w;
过载:
struct animstruct { vector<framestruct> *frames;
framestruct & operator[] (int i) { return (*frames)[i]; } };
animstruct test;
void init_anim(){ test.frames = &some_animation; }
test[0].w;
答案 1 :(得分:1)
test.frames
指向一个向量,因此在索引到向量之前需要取消引用它。
(*test.frames)[0].w