friend



  • Nochmal eine Frage zu friend Funktionen.

    Der Compiler meldet mir :
    1. "error C2248: "data" : Kein Zugriff auf private Element, dessen Deklaration in der Klasse "Euro" erfolgte"
    "Siehe Deklaration von 'data'"

    Aber genau um das zu vermeiden, habe ich doch die Funktion als friend definiert!

    2."error C2593: 'Operator <<' ist mehrdeutig"

    Was bitte habe ich denn nun darunter zu verstehen.

    class Euro
    {
      private:
        long  data;            // Euros * 100 + Cents
    
       public:
        Euro( int euro = 0, int cents = 0)
        {
           if( euro < 0)               // Euro(-1,20) == Euro(-1.20)
              cents = -cents; 
           data = 100L * (long)euro + cents;
        }
    
        Euro( double x)
        {
           x *= 100.0;                               // Runden, z.B.
           data = (long)( x >= 0.0 ? x+0.5 : x-0.5); // 9.7 -> 10
        }
    
       // ---- Operatorfunktionen ----
    
    	friend ostream& operator<<(ostream&, const Euro&);
    
    };
    
    ostream& operator<<(ostream& os, const Euro& e)
    {
    	os << e.data << " Euro";
    	return os;
    }
    
    int main()
    {
    	Euro tst;
    	cout << tst << endl;
    	return 0;
    }
    

    mfg

    Raptor



  • Zeig bitte ein kompilierbares Beispiel, das den Fehler reproduziert.



  • MFK schrieb:

    Zeig bitte ein kompilierbares Beispiel, das den Fehler reproduziert.

    Das wiederspricht sich ja wohl etwas, wenn es einen Kompilerfehler produziert ist es ja nicht kompilierbar.

    Sonst hat er an dem Code bei mir an nichts gemeckert. Ich habe allerdings gerade auch keine Ahnung woran das liegt.



  • Entyl_Sa schrieb:

    MFK schrieb:

    Zeig bitte ein kompilierbares Beispiel, das den Fehler reproduziert.

    Das wiederspricht sich ja wohl etwas, wenn es einen Kompilerfehler produziert ist es ja nicht kompilierbar.

    Damit meint er wohl ein minimales Programm, dass diesen Fehler reproduziert. Denn der gepostete Code ist korrekt.



  • Muss sich wohl um einen Compilerbug des VC++ handeln, der bei friend-Deklarationen in Kombination mit der STL auftritt. Unter dem BCC konnte ich es problemlos kompilieren.



  • ich denke das Problem liegt an etwas das nicht gepostet wurde. ich habe auch erst die fehlermeldung bekommen, dann habe ich den code eine wenig modifiziert:

    #include<iostream>
    
    class Euro
    {
      private:
        long  data;            // Euros * 100 + Cents
    
       public:
        Euro( int euro = 0, int cents = 0)
        {
           if( euro < 0)               // Euro(-1,20) == Euro(-1.20)
              cents = -cents;
           data = 100L * (long)euro + cents;
        }
    
        Euro( double x)
        {
           x *= 100.0;                               // Runden, z.B.
           data = (long)( x >= 0.0 ? x+0.5 : x-0.5); // 9.7 -> 10
        }
    
       // ---- Operatorfunktionen ----
    
        friend std::ostream& operator<<(std::ostream&, const Euro&);
    
    };
    
    using namespace std;
    
    ostream& operator<<(ostream& os, const Euro& e)
    {
        os << e.data << " Euro";
        return os;
    }
    
    int main()
    {
        Euro tst(5,85);
        cout << tst << endl;
        return 0;
    }
    

    und so läuft der auch bei mir.

    irgendwie hebt der das

    using namespace std;
    

    vor der main wieder auf, wenn man es ganz am anfang schreibt.



  • Hallo,

    wenn man so wenig wie möglich Überraschungen mit dem VC6-Compiler erleben möchte, dann sollte man immer das aktuellste ServicePack installieren:

    http://msdn.microsoft.com/vstudio/downloads/updates/sp/vs6/sp5/default.aspx

    dann passiert zumindest das hier angegebene Problem, das hier:

    http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q192/5/39.asp&NoWebContent=1

    beschrieben wurde, (hoffentlich) nicht mehr 😉

    MfG


Anmelden zum Antworten