我正在构建一个基于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;
然后将一个修改后的值存储在堆栈中。
答案 0 :(得分:5)
这是因为您在向量back
和front
方法中传回了对象的副本,而不是参考。
void shrinkToSize();
int currentCapacity() const;
T back(); // < Copy returned from this method, should be T&
T front(); // < Same here!
将上面一行中的T
更改为T&
,您应该很高兴。