Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么我不能直接调用通过指向成员的指针访问的实例的方法_C++_Pointer To Member - Fatal编程技术网

C++ 为什么我不能直接调用通过指向成员的指针访问的实例的方法

C++ 为什么我不能直接调用通过指向成员的指针访问的实例的方法,c++,pointer-to-member,C++,Pointer To Member,例如,我得到了一个内部类: struct Foo { void test() {} }; 还有一个外层舱: struct Bar { Foo foo; }; 然后大体上: 关于bar.*pFoo.test的错误是:成员引用基类型“Foo-bar::*”不是结构或联合,那么bar.*pFoo.test之间有什么不同;Foo-Foo=bar.*pFoo;食物测试 正如注释中所暗示的,.*的运算符优先级低于 因此,bar.*pFoo.test;解析为bar.*pFoo.test;正在尝试访

例如,我得到了一个内部类:

struct Foo {
  void test() {}
};
还有一个外层舱:

struct Bar {
  Foo foo;
};
然后大体上:


关于bar.*pFoo.test的错误是:成员引用基类型“Foo-bar::*”不是结构或联合,那么bar.*pFoo.test之间有什么不同;Foo-Foo=bar.*pFoo;食物测试

正如注释中所暗示的,.*的运算符优先级低于

因此,bar.*pFoo.test;解析为bar.*pFoo.test;正在尝试访问pFoo的测试成员

由于pFoo是Foo-Bar::*类型的成员指针,因此这不是有效的表达式。只有类类型才能显示在成员访问操作符的左侧。将伪析构函数调用语法放在一边,而成员指针不是


第二个示例相当于表达式条。*pFoo.test;相反。

正如注释中所暗示的,.*的运算符优先级低于

因此,bar.*pFoo.test;解析为bar.*pFoo.test;正在尝试访问pFoo的测试成员

由于pFoo是Foo-Bar::*类型的成员指针,因此这不是有效的表达式。只有类类型才能显示在成员访问操作符的左侧。将伪析构函数调用语法放在一边,而成员指针不是


第二个示例相当于表达式条。*pFoo.test;相反。

。函数调用的等级高于取消引用。@BoBTFish谢谢,我以前真的不知道指向成员的指针的优先级。函数调用的等级高于取消引用。@BoBTFish谢谢,我以前真的不知道指向成员的指针的优先级
  Bar bar{};
  Foo Bar::* pFoo = &Bar::foo;

  bar.*pFoo.test(); // does not work

  Foo foo = bar.*pFoo;
  foo.test(); // works;