私が3つのクラスを持っているとしましょう- 、、、のサブクラスAnimal
です(これは最初の講義のように聞こえますが、私が約束する宿題ではなく、実際のコードを単純化するだけです)Cat
Dog
Cat
Dog
Animal
Dog* spike = new Dog();
Cat* puss = new Cat();
int main(int argc, char** argv)
{
function(spike, puss);
return 0;
}
void function(Animal *pet, Animal *pet2)
{
magic->andSoForth();
}
これで、次のエラーが生成されます。
Cannot convert parameter 1 from 'Dog *' to 'Animal'
No constructor could take the source type,
or constructor overload resolution was ambiguous
パラメータを完全に一致するように変更すると、同様のエラーが生成されますが、クラスから同じクラスに変換できないというだけです。
スーパークラスから継承するサブクラス関数とメンバーを正常に呼び出したので、これは論理的には機能するはずです。この言語が私に論理を曲げさせたいのは、どのようにねじれたのかわかりません。
編集
解決策はたまたま次のとおりです。ポインタはすべての人を混乱させます。
- ポインタを宣言します。
- ポインターを処理しない関数への引数としてポインターを送信します。
私の例では、ポインターが必要な関数に「not-pointers」を送信しました。これを切り替えただけです。今では正常に動作します。