2014-04-08 110 views
2

如果我想從一個成員函數我首先想到的語法應該像下面的返回一個指針:返回從成員函數C++的指針

char SecondClass:: *getName() { 
    return this->name; 
} 

但我在Eclipse中有一個錯誤消息它無法解決字段「名稱」。不知怎的,它在這種情況下變得隱藏。

正確的解決方法是這樣的

char *SecondClass:: getName() { 
    return this->name; 
} 

即把一個*類名,而不是函數名之前。

所以我的問題是:爲什麼第一個函數不工作,這些成員函數返回指針的實現有什麼區別?

回答

7

這與指針無關。該方法被稱爲SecondClass::getName(),它返回一個char *。所以,你可以寫

char* SecondClass::getName() 

char *SecondClass::getName() 

,但你不能把*類名和方法名之間。

0

在C++中,成員函數的簽名是 [返回類型] [類名] :: functionName {}

星是返回類型,這是char *,或指針爲char的一部分。你的第一種聲明函數的方式只是無效的C++。

1

char SecondClass:: *getName()char *SecondClass:: getName()是非常不同的功能。

第一個不是SecondClass或任何其他類的成員函數,因此您不能在其中引用this。它恰好返回一種稱爲的指針指向成員的特殊類型的指針。它的類型拼寫爲char SecondClass:: *,它是SecondClass中類型爲char的成員的指針。你可能不想知道任何這一點。

你想要的ssyntax是返回類型函數名參數列表。您想要定義一個名爲SecondClass::getName的函數,該函數返回char *且不帶參數,因此char *SecondClass::getName()