2012-07-29 20 views
1

此代碼不會編譯(給出錯誤C2059,C2065,C2072,C2143,C2146,C2447,C2470,C4430) 但如果將B *更改爲像int這樣的inbuild類型, 有什麼建議嗎?模板類的成員函數無法返回指向成員結構的指針?

template <typename T> 
class A 
{ 
private: 
    struct B 
    { 
     T key; 
    }; 

    B* foobar(T key); 

}; 

template <typename T> 
B* A<T>::foobar(T key) 
{ 
    B* ptr = new B; 
    B->key = key; 
    return ptr; 
} 

int main() 
{} 

回答

4

您的方法的一些錯誤。

1)返回類型的範圍必須合格。

2)您必須設置key如果A::<T>::B實例,而不是B

試試這個:

template <typename T> 
typename A<T>::B* A<T>::foobar(T key) // fix error 1) 
{ 
    B* ptr = new B(); 
    ptr->key = key; // fix error 2) 
    return ptr; 
} 
+0

新B()的意義是什麼?我們是否在呼叫默認的初始化程序?與「新B」有什麼不同? – 2012-07-29 09:42:00

+0

@IshanBhatnagar在這種情況下是沒有區別的。你可以使用'new B',它也調用默認的構造函數。 – juanchopanza 2012-07-29 10:02:40

1

的返回類型應該是typename A<T>::B*,不只是B*

template<typename T> 
typename A<T>::B* A<T>::foobar(T key) 
{ 
    //.. 
} 

另請注意,返回類型typename關鍵字。