2013-09-29 149 views
2

我正在构建基于我的Vector类的堆栈和队列类。每一个,我需要调用一个函数,允许我修改该索引的值。无法通过引用C++传递值

堆栈,该功能是:

T &top() 

不过,我似乎无法修改这个值,这是我的最终目标是什么。目前,我已经从堆栈函数中删除了&,所以可以显示值,但不能修改。

当我在栈或队列中包括&时,错误是一样的。所以,我认为问题是一样的,而且我相信,它的语法与

为前:

error C2440: 'return' : cannot convert from 'float' to 'float &' 

这里是我的Stack.h

template <class T> 
class Stack{ 
private: 
    Vector<T> stack; 
public: 
    void push(const T &x) {stack.push_back(x);} 
    void pop(){stack.pop_back();} 
    bool empty(){return stack.empty();} 
    int currentCapacity() const {return stack.currentCapacity();} 
    int size(){return stack.size();} 
    T &top() {return stack.back();} 

}; 

这是我的矢量头文件,以及我正在调用的功能堆栈:

#include<iostream> 
using namespace std; 

const int SIZEFACTOR = 4; 

template <class T> 
class Vector{ 
private: 
    unsigned int size_Of_Vector; // # of Items in list 
    unsigned int total_Vector_Capacity;//Total Capacity 
    T * vector_array;//Items themselves 
public: 
    Vector(); 
    ~Vector(); 
    void push_back(const T &e); 
    void pop_back(); 
    void pop_front(); 
    bool empty(); 
    int size() const; 
    void growVector(); 
    void shrinkVector(); 
    void shrinkToSize(); 
    int currentCapacity() const; 
    T back(); 
    T front(); 
    //Operator 
    const T & operator [] (int index){ 

     if((index >= size_Of_Vector) || index < 0){ 
      cout << "ERROR! Index not used: " << index 
       << " (max = " << size_Of_Vector << ")" << endl; 
      return EXIT_FAILURE;    
     }  

     return vector_array[index]; 
    };//End Operator  
};//End Header Definition 

template <class T> 
T Vector<T>::back(){ 
    if(size_Of_Vector == 0){ 
     cout << "Vector is EMPTY" << endl; 
     return 0; 
    } 
    return vector_array[size_Of_Vector-1];//returns top 
} 

任何能够帮助我指出正确方向的人?最终的目标我想达到的是能够调用是这样的:(假设模板为int)

x.top() += 5; 

然后有存储在堆栈上修改的值。

回答

5

这是因为你回传对象的副本你的载体内backfront方法,而不是一个参考。

void shrinkToSize(); 
int currentCapacity() const; 
T back();  // < Copy returned from this method, should be T& 
T front();  // < Same here! 

更改线路中的T以上T&,你应该是好去。