通过引用传递以错误结束

时间:2015-04-12 21:12:48

标签: c++ function templates pointers reference

我遇到了一个问题,我确信它很小但是当我尝试运行我的程序时,它会指出 - push_back(T &):cannot convert argument 1 from 'Savings*' (or Checkings*) to 'Account *&

如果我删除&来自push_back参数但我不明白当你尝试通过引用传递而不是复制时有什么区别。它的工作原理是否相同?
我已经在source.cpp文件和MyVector.h中的push_back函数中附加了错误开始的代码。

source.cpp:

MyVector<Account*> acc;

acc.push_back(new Savings(new Person("Bilbo Baggins", "43 Bag End"), 1, 500, 0.075));
acc.push_back(new Checkings(new Person("Wizard Gandalf", "Crystal Palace"), 2, 1000.00, 2.00));
acc.push_back(new Savings(new Person("Elf Elrond", "Rivendell"), 3, 1200, 0.050));

MyVector.h:

template<class T>
void MyVector<T>::push_back(T& n)
{
    if (vCapacity == 0)
    {
        vCapacity++;
        T* tmp = new T[vCapacity];
        delete[] vArray;
        vArray = tmp;
    }

    if (vSize >= vCapacity)
    {
        grow();
    }
    vArray[vSize] = n;
    vSize++;
}

1 个答案:

答案 0 :(得分:3)

假设SavingsCheckings派生自Accounts,通过引用传递不起作用,因为您无法将临时绑定到非const引用。

将签名更改为

template<class T>
void MyVector<T>::push_back(const T& n)

按值传递有效,因为您有效地复制了参数。