【问题标题】:Can't pass value by reference C++无法通过引用 C++ 传递值
【发布时间】:2013-09-29 22:17:05
【问题描述】:

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

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

【问题讨论】:

    标签: c++ vector reference stack


    【解决方案1】:

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

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

    将上面几行中的T 更改为T&amp;,你应该很高兴。

    【讨论】:

      猜你喜欢
      • 2020-04-01
      • 1970-01-01
      • 2014-07-05
      • 1970-01-01
      • 2023-03-03
      • 2011-01-17
      相关资源
      最近更新 更多