2013-10-07 66 views
0

我可以在同一個類中創建一個類的對象嗎? 如果不是我能做什麼?我可以在同一個類中創建對象嗎?

例如堆棧類

template <class T> 
class stack 
{ 

void push(T d) 
{ 
... 
} 

T pop() 
{ 
... 
} 

//my question is about this one 
void sort() 
{ 
// I get errors when I do that ? 
stack st; 
st.push(4); 
} 

}; 
+1

你想用你的排序方法做什麼?如果你想使用你的類,你應該創建一個類的實例 – Sasha

+1

'stack'需要用類型'stack st;' –

+0

實例化你得到了什麼錯誤? – doctorlove

回答

1

這是完全確定以創建一個類中的相同類型的一個對象。你應該能夠得到它與stack<T>工作,這樣

template <class T> 
class stack 
{ 
    ... 

    void sort() 
    { 
     stack<T> st; 
     st.push(4); 
    } 

    ... 
}; 

似乎stack st;根據最新的C++標準是正確的,但也許你的編譯器沒有實現的C++標準的這一部分呢。

話雖如此,從發佈的代碼中不清楚爲什麼這是一個模板。如果它是我期望看到的模板

void push(const T& x) 
{ 
    ... 
} 

T pop() 
{ 
    ... 
} 

等您確定要將其作爲模板嗎?你應該做到這一點,或根本沒有。

+0

我想知道如何將嘗試交換本身'ST' – doctorlove

+0

我覺得第14.6節。 1意味着我們錯了,編譯好沒有 VS2012。 – doctorlove

+0

@doctorlove好的,我會修改我的答案。 – john

1

沒有模板,這很好,例如,現在

class stack 
{ 
    public: //<-- added so we can use this 
    void push(int d) 
    { 
    //... 
    } 

    int pop() 
    { 
    //... 
    } 

    void sort() 
    { 
    stack st; 
    st.push(4); 
    } 
}; 

,在你的模板的情況下,你會 需要 可以告訴排序功能,使什麼樣的堆棧。

void sort() 
    { 
    stack<T> st; 
    //---^^^ 
    st.push(4); 
    } 

更多編輯 第14.6.1

「注入的類名可以使用或不使用 模板參數列表中。當無 使用模板參數列表,它相當於注入類名稱 ,後跟包含在 <>中的類模板的模板參數。

所以,你可以說stack st;
你將不能夠有stack<T>類的成員變量,雖然。

相關問題