2013-09-29 109 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