2013-09-29 3 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();} 

}; 

Вот мой файл Вектор заголовок , и функцию, которую я звоню в 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 
} 

Любой, кто может помочь мне указать направление в правильном направлении? Конечная цель я пытаюсь достичь, чтобы быть в состоянии назвать что-то вроде: (Если предположить, что шаблон является целое)

x.top() += 5; 

А затем модифицированное значение, сохраненное в стеке.

ответ

5

Это потому, что вы передаете копию объекта внутри своих векторов back и front методов, а не ссылок.

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

Измените T в строках выше для T&, и вы должны быть хорошо идти.

Смежные вопросы