我遇到了一個我確定很小的問題,但是當我嘗試運行我的程序時,它聲明瞭 - push_back(T &):cannot convert argument 1 from 'Savings*' (or Checkings*) to 'Account *&
。通過引用傳遞錯誤結尾
它工作,如果我從push_back
參數中刪除&,但我不明白當您嘗試通過引用而不是複製傳遞時有什麼不同。它不應該一樣嗎?
我已經在源代碼文件中添加了錯誤開始的代碼,並在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',並保存你的調用者一些惱人的解決方法。 – chris
我會假設'Savings'和'Checkings'從'Account'繼承? – EMBLEM