【发布时间】:2015-04-12 21:12:47
【问题描述】:
我遇到了一个我确信很小的问题,但是当我尝试运行我的程序时,它指出 - 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++;
}
【问题讨论】:
-
如果您不修改参数,请将其设为
const并为您的调用者节省一些烦人的解决方法。 -
我会假设
Savings和Checkings继承自Account?
标签: c++ function templates pointers reference