2013-09-29 160 views
0

我重新創建與陣列載體類,和我有在價值觀傳遞給我創造測試,以查看該對象的小錯誤,如果功能正常工作值傳遞到一個模板對象

下面是代碼

template<typename T> 
class stack 
{ 
public: 
void pop() 
    { 
     S1.pop_back(); 
    } 
void push(T &e) 
    { 
     S1.push_back(e); 
    } 
T& top() 
    { 
     counter = S1.Counter(); 
     cout << counter; 
     return S1[counter]; 
    } 
bool empty() 
    { 
     if (S1.Counter() == 0) 
      { 
       return true; 
      } 
     else 
      { 
       return false; 
      } 
    } 
private: 
sean<T> S1; 
int counter; 
}; 

對象調用

int main(int argc, char *argv[]) 
{ 
stack<int> S1; 
S1.push(1); 


return 0; 
} 

在主函數中我只是創造一個「堆棧」對象S1並要撥打的推(T &Ë )功能,但我得到錯誤

Initial value of reference to non-const must be an Ivalue 

這可能是簡單的,但任何幫助,將不勝感激。謝謝。

+0

在錯誤消息,這可能是一個「左值」,而不是「Ivalue」。 ....我的意思是,'lvalue'不''Ivalue':D – dyp

+2

我希望我們有針對特定作業問題的獨特標籤,這樣每個試圖在本週末實現「實施堆棧」最後期限的人都可以結合在一起。 –

+2

@KerrekSB [家庭作業溢出](http://area51.stackexchange.com/proposals/44531/stack-overflow-homework)? – dyp

回答

1

你想通過一個臨時的,但一個正常的引用只能綁定變量。 這將解決這個問題:

void push(T const& e) 
{ 
     S1.push_back(e); 
} 
+0

「只能綁定變量」非const(左值)引用可以綁定到也不是變量的左值。例如。 'int&foo(); int&ref = foo();'或'int&ref = *(new int);'(永遠不要做後者,但它是可能的)。變量是左值,因此非常量左值引用可以綁定到變量。 – dyp