c++ - 引用传递以错误结束

标签 c++ function templates pointers reference

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

如果我从 push_back 参数中删除 & 它会起作用,但我不明白当您尝试通过引用而不是复制传递时有什么区别。它不应该一样工作吗?
我附上了 source.cpp 文件中错误开始的代码和 MyVector.h 中的 push_back 函数。

源代码.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++;
}

最佳答案

假设 SavingsCheckings 派生自 Accounts,通过引用传递不起作用,因为您不能将临时绑定(bind)到非常量引用。

将签名改为

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

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

关于c++ - 引用传递以错误结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29594722/

相关文章:

Python ttk.Button -命令,无需按下按钮即可运行

c++ - 如何将模板参数重复附加到类型?

c++ - 为什么 'int i = i;' 合法?

c++ - 公式序列

c++ - void ** 函数参数中的指针 c++

python - 如何获取 Jinja2 模板中的参数列表

javascript - AngularJS:在指令模板函数中返回一个 promise

c++ - 出于测试目的故意让 C++ 程序运行得更慢?

c++ - 如何从 Windows 文件资源管理器中选择文件

c++ - int **a 和 int a[][] 作为 C 和 C++ 中的函数参数之间的确切区别是什么?