Problem: Ausgabe einer Stringvariable einer Klasse



  • Hallo!

    Ich habe eine Klasse namens "Produkt". Diese beinhaltet eine Variable namens "name".

    Diese möchte ich in einer anderen Funktion, der ein Zeiger namens "produkt1" auf ein Objekt der Klasse "Produkt" übergeben wurde, ausgeben.

    Mit "produkt1->getName()" bekomme ich ja den String.
    Mit "printf(produkt1->getName());" kann ich ihn allerdings nicht ausgeben:

    Fehler:

    k:\schule\c++\ausgeben.cpp(14) : error C2664: 'printf': Konvertierung des Parameters 1 von 'std::string' in 'const char *' nicht möglich
            Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden
    

    Mit cout << produkt1->getName(); geht es auch nicht.

    Das Ganze mache ich mit Visual Studio 2005

    Mit dem DevCompiler funktionieren folgende 2 Zeilen:

    string bla = " d";
         cout << bla;
    

    In meinem Visual Studio-Projekt jedoch nicht...

    Hat da jemand eine Ahnung, woran das liegt?



  • lukbra schrieb:

    Mit "printf(produkt1->getName());" kann ich ihn allerdings nicht ausgeben:

    printf ist eine C-Funktion und kann mit std::string nicht umgehen. Du kannst mit der funktion c_str() jedoch einen const char * erhalten:

    printf(produkt1->getName().c_str());
    

    lukbra schrieb:

    Mit cout << produkt1->getName(); geht es auch nicht.

    Fehlermeldungen??? Hast du iostream und string inkludiert?



  • Ah, cool. Jetzt geht beides. Vielen Dank.
    Für cout habe ich "#include <string>" vergessen. Mich wundert dann nur, dass ich den string definieren konnte.

    Hier nochmal die übertriebene Fehlermeldung:

    k:\schule\c++\luke\ausgeben.cpp(15) : error C2679: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
            c:\programme\microsoft visual studio 8\vc\include\ostream(656): kann 'std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)' sein
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(703): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<char,std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(741): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const char *)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(788): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,char)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(912): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const signed char *)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(919): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,signed char)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(926): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,const unsigned char *)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(933): oder "std::basic_ostream<_Elem,_Traits> &std::operator <<<std::char_traits<char>>(std::basic_ostream<_Elem,_Traits> &,unsigned char)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(174): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ostream<_Elem,_Traits> &(__cdecl *)(std::basic_ostream<_Elem,_Traits> &))"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(180): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_ios<_Elem,_Traits> &(__cdecl *)(std::basic_ios<_Elem,_Traits> &))"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(187): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::ios_base &(__cdecl *)(std::ios_base &))"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(194): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::_Bool)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(214): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(short)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(247): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned short)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(267): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 int)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(292): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned int)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(312): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(332): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__w64 unsigned long)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(353): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(__int64)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(373): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(unsigned __int64)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(394): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(float)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(414): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(double)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(434): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(long double)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(454): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(const void *)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            c:\programme\microsoft visual studio 8\vc\include\ostream(474): oder "std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator <<(std::basic_streambuf<_Elem,_Traits> *)"
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]
            bei Anpassung der Argumentliste '(std::ostream, std::string)'
    


  • Templates führen zu wunderschönen Fehlermeldungen, daran musst du dich leider gewöhnen.

    MfG SideWinder


Anmelden zum Antworten