Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ZString] Combiner operator<< et operator+

Erreur de compilation

Sujet résolu
    1 juin 2008 à 12:14:11

    Bonjour à tous !
    Je suis actuellement le TP de M@teo pour créer la classe ZString. Je suis rendu à la fin, j'ai surchargé les opérateurs + et << mais je recontre un problème quand je combine les deux. Je vous poste mon code :
    ZString ZString::operator+(const ZString &chaine)
    {
    	long nv_longueur = m_longueur + chaine.m_longueur;
    	char *nv_chaine = new char[nv_longueur + 1];
    	
    	for (int i = 0; i < m_longueur; i++)
    	{
    		nv_chaine[i] = m_chaine[i];
    	}
    	
    	for (int i = m_longueur; i <= nv_longueur; i++)
    	{
    		nv_chaine[i] = chaine.m_chaine[i - m_longueur];
    	}
    	
    	ZString resultat(nv_chaine);
    	delete[] nv_chaine;
    	
    	return resultat;
    }
    
    ostream &operator<<(ostream &out, ZString &chaine)
    {
    	out << chaine.get_chaine();
    	
    	return out;
    }
    


    Ces deux surcharges marchent séparément, c'est-à-dire quand je fais :
    resultat = chaine1 + chaine2;
    

    ou
    cout << chaine1;
    


    En revanche, quand j'essaye de faire ça :
    cout << (chaine1 + chaine2) << endl;
    


    J'obtiens de jolies insultes de la part du compilateur :
    main.cpp: In function «int main(int, char**)»:
    main.cpp:12: erreur: no match for «operator<<» in «std::cout << ZString::operator+(const ZString&)(((const ZString&)((const ZString*)(& chaine2))))»
    /usr/include/c++/4.2/ostream:112: note: candidats sont: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:121: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:131: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:169: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:173: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:177: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/bits/ostream.tcc:92: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:184: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/bits/ostream.tcc:106: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:195: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:204: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:208: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:213: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:217: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:225: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/ostream:229: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char, _Traits = std::char_traits<char>]
    /usr/include/c++/4.2/bits/ostream.tcc:120: note:                 std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
    ZString.h:38: note:                 std::ostream& operator<<(std::ostream&, ZString&)


    Merci d'avance pour votre aide ;)


    EDIT: Heuuu en fait, après bidouillage (rajout de const un peu partout...) le problème a été résolu ! Merci quand même à ceux qui ont commencé à chercher ^^
    • Partager sur Facebook
    • Partager sur Twitter

    [ZString] Combiner operator<< et operator+

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown