2014-12-06 24 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(); 
相關問題