2014-12-06 26 views
4

A现在删除的问题,有一些与此类似:什么是A B :: * func()定义?

struct A { }; 
struct B { 
    A read(); 
}; 

A B::* read() 
{ 
    return A{}; 
} 

该代码会给出错误:

error: cannot convert ‘A’ to ‘A B::*’ in return 
    return A{}; 

正如我们所看到的,这是不是read()一个不折不扣的类定义但定义了一个返回A B::*的非成员函数。在这种情况下,究竟是什么A B::*

回答

5

A B::*指“指向与A类型的B数据成员,例如:

struct B { 
    A x; 
}; 

... 

B b; 
A B::*ptr = &B::x; // ptr is the variable declared here. 
b.*ptr = foo; // same as b.x = foo; 

在你的代码的情况下,这将意味着一个函数(不是一个成员函数)返回一个指针成员时。可以有

A B::*foo() { 
    return &B::x; 
} 

... 

A B::*ptr = foo(); 
相关问题