Keine zulässige Konvertierung für den this-Zeiger



  • Hallo!

    Habe folgende Fehlermeldung vom Compiler bekommen:

    Für 2 Überladungen gibt es keine zulässige Konvertierung für den this-Zeiger.

    Ich versuche folgenden Code in main zu testen:

    void _cdecl main(void) {
      uci_options_c options;
    
      options.initialize();
      options.add(16, 16, 1024, "Transposition Table Size");
      options.add(50, 0, 100, "Agressiveness");
    
      printf_s("%d\n", options.find_by_name("Transposition Table Size")->get_current_value());
      options.print();
      // options.find_by_name("Transposition Table Size")->set(128); // hier kracht es?
    }
    

    Das Headerfile enhält alle Definitionen:

    #ifndef included_options_h
    #define included_options_h
    
    ////
    ////  includes
    ////
    
    #include <stdio.h>
    #include <string.h>
    
    ////
    //// constants
    ////
    
    const int SPIN_OPTIONS = 8;
    
    ////
    ////  spin_option_c
    ////
    
    class spin_option_c {
      friend class uci_options_c;
    
    private:
      int current_value;
      int min_value;
      int max_value;
      char name[128];
    
    public:
      inline void set(int value) {
        if (value < min_value) value = min_value;
        if (value > max_value) value = max_value;
        current_value = value;
      }
    
      inline void set(int value, int min, int max, const char * string) {
        if (min > max) min = max;
        min_value = min;
        max_value = max;
        set(value);
        strcpy_s(name, 128, string);
      }
    
      inline int get_current_value(void) const {
        return current_value;
      }
    
      inline const char * get_name(void) const {
        return name;
      }
    
      inline void print(void) const {
        printf_s("option name %s type spin default %d min %d max %d\n", name, current_value, min_value, max_value);
      }
    };
    
    ////
    ////  uci_option_c
    ////
    
    class uci_options_c {
    private:
      int spin_options;
      spin_option_c spin_option_list[SPIN_OPTIONS];
    
    public:
      inline void initialize(void) {
        spin_options = 0;
      }
    
      inline void add(int value, int min, int max, const char * string) {
        if (spin_options < SPIN_OPTIONS) {
          spin_option_list[spin_options++].set(value, min, max, string);
        }
      }
    
      inline const spin_option_c * find_by_name(const char * name) const {
        for (int i = 0; i < spin_options; i++) {
          if (strcmp(name, spin_option_list[i].get_name()) == 0) {
            return spin_option_list + i;
          }
        }
        return NULL;
      }
    
      inline void print(void) const {
        for (int i = 0; i < spin_options; i++) {
          spin_option_list[i].print();
        }
      }
    };
    
    #endif
    

    Weshalb kann ich mit dem this-Zeiger nicht auf überladene Funktionen zugreifen? Was habe ich entweder falsch implementiert oder falsch verstanden? Wo ist mein Denkfehler?

    Danke für eure Hilfe!



  • Ich vermute es geht nicht um die Überladung der Funktionen, sondern darum, dass ich mittels einer const-Funktion keine Memberdaten verändern kann.



  • find_by_name liefert einen Zeiger auf const zurück. Du hast 2 set -Funktionen, aber keine von denen ist const .


Log in to reply