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 istconst
.