2

我正在构建一个基于我的 Vector 类的堆栈和队列类。每一个,我都需要调用一个函数来修改该索引处的值。

对于堆栈,该函数是:

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();}

};

这是我的 Vector 头文件,以及我在 Stack 中调用的函数:

#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;

然后将修改后的值存储在堆栈中。

4

1 回答 1

5

这是因为您在向量backfront方法中传回对象的副本,而不是引用。

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

T将上面的行更改为T&,您应该一切顺利。

于 2013-09-29T22:21:20.610 回答