Türetilmiş bir sınıf için farklı parametre listeleri ile eşit olarak adlandırılan iki yöntem miras almaya çalışıyorum. Bunlardan biri türetilmiş sınıfta sanal ve geçersizdir, diğeri sanal değildir. Bunu yapmak için, türetilmiş bir sınıf nesnesinden temel sınıfın sanal olmayan yöntemine erişmeye çalışırken bir derleme hatası alıyorum. C++ 'da bir uzman değilimC++: aşırı yüklenmiş sanal olmayan yöntem ve sanal yöntem her ikisi de aynı ada sahip sorun neden
error: no matching function for call to ‘Deriv::f()’
note: candidates are: virtual void Deriv::f(int)
, ama şimdiye kadar varsayım yapımında doğru olduğu düşünülen: Burada
aşağıdaki derleme hatasına üretir kod parçacığıclass Base {
public:
void f() {
cout << "[Base::f()]" << endl;
}
virtual void f(int arg) {
cout << "[Base::f(" << arg << ")]" << endl;
}
};
class Deriv : public Base {
public:
virtual void f(int arg) {
cout << "[Deriv::f(" << arg << ")]" << endl;
}
};
int main() {
Deriv d;
d.f(-1);
d.f(); // <<-- compile error
return 0;
}
olduğunu Bu üye yöntemleri imzaları ile tamamen ayırt edilebilir. Böylece, sanal olmayan yöntem Base :: f() geçersiz kılınmamalı ve erişilebilir kalmalıdır. Bununla yanlış mıyım? İşte
bazı ilginç/ek konuda yorumlar şöyle:-
- (int arg) yanı olmayan sanal olabilir bastıran metod Deriv :: f; hata
her iki şekilde gerçekleşir - Hata/atlatılabilir kaybolur ...
-
... zaman Taban :: f geçersiz kılma değil ... Baz sınıfına
için Deriv nesnesini döküm yoluyla (int arg) Deriv'de
... "Base :: f;" komutunu ekleyerek Zaten bu derleme hatası önlemek için biliyorum çünkü Yani DERIV
kamu kısmına, bu hata olur nedenağırlıklı ilgileniyorum! Lütfen bana bu konuda ışık tutmak için bana yardım edin ...
Teşekkürler advanvce! emme
Deriv
yılında
"... Deriv'in public kısmına" Base :: f; "komutunu ekleyerek," Base :: f; arasında – Tomaka17
olası yinelenen [C bir üs Aşırı Yükleme Fonksiyonu geçersiz kılma ++] (http://stackoverflow.com/questions/888235/overriding-a-bases-overloaded-function-in-c) Tomaka17 @ –
: Hayır, tam olarak demek : satırı Base :: f; Sınıfa . Ama açıkçası bu, ".. .. kullanma" komutuyla aynıdır. – Emme