可以定义指向成员的指针,并在以后使用它:
struct foo { int a; int b[2]; };int main() {
foo bar; int foo::* aptr=&foo::a; bar.a=1; std::cout << bar.*aptr << std::endl; }
现在我需要一个指向数组特定元素的指针,所以通常我会写.
int foo::* bptr=&(foo::b[0]);
但是,编译器只是抱怨"invalid use of non-static data member 'foo::b'
"是否可以这样做(或者至少没有工会)?
编辑:我需要一个指向数组特定元素的指针,因此int foo::* ptr
指向数组的第二个元素(foo::b[1]
).
还有另一个编辑:我需要访问数组中的元素bar.*ptr=2
,因为指针在其他地方被使用,因此无法使用bar.*ptr[1]=2
或调用它*ptr=2
.
但是,编译器只是抱怨"无效使用非静态数据成员'foo :: b'"
这是因为foo::a
并且foo::b
有不同的类型.更具体地说,foo::b
是int
s 的大小为2的数组.您的指针声明必须兼容,即:
int (foo::*aptr)[2]=&foo::b;
是否可以这样做(或者至少没有工会)?
是的,见下文:
struct foo { int a; int b[2]; }; int main() { foo bar; int (foo::*aptr)[2]=&foo::b; /* this is a plain int pointer */ int *bptr=&((bar.*aptr)[1]); bar.a=1; bar.b[0] = 2; bar.b[1] = 11; std::cout << (bar.*aptr)[1] << std::endl; std::cout << *bptr << std::endl; }
根据OP的要求更新了帖子.