无法通过引用C ++传递值

时间:2013-09-29 22:17:05

标签: c++ vector reference stack

我正在构建一个基于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;

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

1 个答案:

答案 0 :(得分:5)

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

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

将上面一行中的T更改为T&,您应该很高兴。