Sicherbarkeit baseclass mit rein virtuellen member funktionen
-
hi leute,
steht grad etwas am schlauch. folgender code:
class IConstKeyValueAnsi { public: using size_type = unsigned int; using error_type = int; virtual auto __stdcall Key(void) const noexcept -> const char* = 0; virtual auto __stdcall Value(void) const noexcept -> const char* = 0; }; /* class IConstKeyValueAnsi */ class IKeyValueAnsi : public IConstKeyValueAnsi { public: using size_type = IConstKeyValueAnsi::size_type; using error_type = IConstKeyValueAnsi::error_type; virtual auto __stdcall Key(const char *str) noexcept -> error_type = 0; virtual auto __stdcall Value(const char *str) noexcept -> error_type = 0; virtual auto __stdcall Set(const char *t_key, const char *t_value) noexcept -> error_type = 0; }; /* class IKeyValueAnsi */einer anderen klasse uebergebe ich einen pointer auf IKeyValueAnsi:
auto key_value_list_ansi::Add(const IKeyValueAnsi * data) noexcept -> error_type { int err = 0; try { err = add(data->Key(), data->Value()); } catch(const std::bad_alloc&) { err = static_cast<int>(interface_error_codes::bad_alloc); } return err; }hier kennt er scheinbar nur die member funktionen von IKeyValueAnsi, aber nicht von IConstKeyValueAnsi.
folgender code wiederum funktioniert:auto key_value_list_ansi::Add(const IKeyValueAnsi * data) noexcept -> error_type { int err = 0; try { const IConstKeyValueAnsi *temp = data; err = add(temp->Key(), temp->Value()); } catch(const std::bad_alloc&) { err = static_cast<int>(interface_error_codes::bad_alloc); } return err; }wo hab ich da den denkfehler ?
Meep Meep
-
Funktionen mit gleichem Namen aber anderer Signatur sind in einer abgeleiteten Klasse nicht sichtbar. Du musst sie mit using sichtbar machen.
-
yep genau. jetzt wo ichs gelesen hab faellt mir ein das ich das selbe problem vor paar wochen schon mal hier gepostet hab..
danke
-
wobei ich den sinn irgendwie nicht verstehe.
wohl der grund warum ich es immmer wieder vergesse