我遇到了一个问题,我确信它很小但是当我尝试运行我的程序时,它会指出 - 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++;
}
答案 0 :(得分:3)
假设Savings
和Checkings
派生自Accounts
,通过引用传递不起作用,因为您无法将临时绑定到非const引用。
将签名更改为
template<class T>
void MyVector<T>::push_back(const T& n)
按值传递有效,因为您有效地复制了参数。