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


Anmelden zum Antworten