Pointer auf String Funktion wird nicht konvertiert



  • Hallo und guten morgen liebe Gemeinde.

    Ich wollte auf eine String Funktion einen Pointer zeigen lassen, damit ich an die Speicheradresse komme.

    Hier folgender Code:

    #include <iostream>
    #include <string>
    using namespace std;
    
    string String_Addition(string Str_1, string Str_2) //Funktion String_Addition anlegen
    {
    	return (Str_1 + Str_2); //Str_1 + Str_2 zurückgeben
    }
    
    int main() //Aufruf der main()
    {
    	string Str_1, Str_2, Str_3; //Variablen Str_1, Str_2 und Str_3 anlegen
    	string *pString_Addition = &String_Addition; //Pointer auf die Funktion String_Addition initialisieren
    	string *pStr_3 = &Str_3; //Pointer auf die Variable Str_3 initialisieren
    
    	cout << "Geben Sie das erste Wort ein:\n";
    	cin  >> Str_1;//erste Haelfte des Wortes eingeben
    	cout << "Geben Sie das zweite Wort ein:\n";
    	cin  >> Str_2;//Zweite Haelfte des Wortes eingeben
    
    	Str_3 = String_Addition(Str_1, Str_2);//Str_1 und Str_2 zu einem Wort zusammenfuegen
    
    	cout << "Zusammengefuegtes Wort heisst: \n";
    	cout << Str_3 << "\n"; //zusammengefuegtes Wort ausgeben
    	cout << "Speicheradresse der Funktion String_Addition:\n";
    	cout << pString_Addition << "\n"; //Speicheradresse der Funktion String_Addition ausgeben
    	cout << "\n"; //Leerzeile
    	cout << "Speicheradresse des Summandens Str_3:\n";
    	cout << pStr_3 << "\n"; //Speicheradresse des zusammengefuegtem Wortes ausgeben
    	cout << "\n"; //Leerzeile
    
    	return 0;
    }
    

    Hier die Fehlermeldung die ich bekomme:

    error C2440: 'Initialisierung': 'std::string (__cdecl *)(std::string,std::string)' kann nicht in 'std::string *' konvertiert werden
              Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
    

    Die Fehlermeldung bezieht sich auf Zeile 13.

    Warum ist die Konvertierung nicht möglich bzw. was habe ich falsch gemacht?

    Danke für die Antworten im Voraus.

    Gruß

    Max



  • "string *pString_Addition" ist ein Pointer auf einen String. Nicht auf eine Funktion.



  • silent_max schrieb:

    Ich wollte auf eine String Funktion einen Pointer zeigen lassen, damit ich an die Speicheradresse komme.

    Wie kommt man als Anfänger - als der man ja eigentlich Programmieren lernen möchte - auf so eine beknackte, sinnlose Idee?



  • daddy_felix schrieb:

    "string *pString_Addition" ist ein Pointer auf einen String. Nicht auf eine Funktion.

    Wie muss ich dann den Code ändern, damit das mit dem Zeiger auf die Funktion klappt? Funktioniert das überhaupt?

    Belli schrieb:

    Wie kommt man als Anfänger - als der man ja eigentlich Programmieren lernen möchte - auf so eine beknackte, sinnlose Idee?

    Weil es eine Übungsaufgabe von der Schule ist...



  • silent_max schrieb:

    Wie muss ich dann den Code ändern, damit das mit dem Zeiger auf die Funktion klappt? Funktioniert das überhaupt?

    Man schreibt den Typ ab der in der Fehlermeldung steht? 😕

    std::string (__cdecl *)(std::string,std::string)

    Wobei man das __cdecl nicht braucht, das ist auch kein Standard. ->

    std::string (*)(std::string,std::string)

    ->

    std::string (*pString_Addition)(std::string,std::string) = String_Addition
    

    https://ideone.com/4fv1Om
    Oder, mit C++11, man nutzt einfach auto:
    https://ideone.com/RS6wUW



  • Was ist eine String Funktion?



  • silent_max schrieb:

    cout << "Speicheradresse des Summandens Str_3:\n";
    	cout << pStr_3 << "\n"; //Speicheradresse des zusammengefuegtem Wortes ausgeben
    

    'Summand' halte ich in diesem Zusammenhang nicht für das richtige Wort.
    Und ausgegeben wird nicht die Adresse des zusammengefügten Wortes, sondern die Adresse des Stringobjektes, das das zusammengefügte Wort enthält! Das ist ein Riesenunterschied!



  • Belli schrieb:

    'Summand' halte ich in diesem Zusammenhang nicht für das richtige Wort.
    Und ausgegeben wird nicht die Adresse des zusammengefügten Wortes, sondern die Adresse des Stringobjektes, das das zusammengefügte Wort enthält! Das ist ein Riesenunterschied!

    Ok, hast recht...


Anmelden zum Antworten