Interner Fehler und friend



  • Hallo zusammen

    Ich erhalte bei diesem Code mit dem Microsoft Visual C++ 6.0 einen internen
    Compiler Fehler C1001. Nun würde ich gerne wissen, ob es an dem Code
    liegt oder am Compiler und wie ich dieses Problem beheben kann. Soweit ich
    das schon herausgefunden habe, hängt es irgendwie mit dem überladenen operator zusammen (ist ja auch nicht besonders viel enthalten 🙂 ).

    Datum.h

    class Datum
    {
    
        time_t sec; 
    
      public:
    
    	Datum (time_t s=0) {sec=s;}
    
    	void set_sec (const time_t& s){sec=s;}
        friend Datum operator- (const Datum& ,const Datum& );
    
    };
    

    Datum.cpp

    #include "datum.h"
    
    Datum operator- (const Datum& s1,const Datum& s2)
     {
       Datum tmp;
       tmp.sec = s1.sec - s2.sec;
       return tmp;
     }
    

    Gruß elwida



  • sieht (relativ) ok aus. was hast du den herausgefunden? hast du das als minimalbeispiel schon einmal ausprobiert.



  • edit: worng...



  • jep als minimalbeispiel ausprobiert. habe nur diese eine methode in meiner Klasse stehen. komischer weise aber tritt nur der fehler auf wenn ich auf minus oder plus hin überladen möchte.

    Gruß elwida



  • probier mal das:

    class x {
    //...
    public:
      x operator + (const x&) {
         return x(this->value + x.value);
      }
    };
    


  • ja funktioniert

    class Datum
    {
    
        time_t sec; 
    
    public:
    
    	Datum (time_t s=0) {sec=s;}
    
    	void set_sec (const time_t& s){sec=s;}
    
    	Datum& operator +=(const Datum& sec1)
    	{ 
    		sec += sec1.sec;
    	    return *this;
    	}
    
    };
    
    inline Datum operator+ (const Datum& se1,const Datum& se2)
      {
    	Datum tmp(se1);
        tmp +=se2; 
        return tmp;
    }
    

    funktioniert ebenso
    nur wenn friend ins spiel kommt gibt es den fehler

    gruß elwida



  • Hast du das SP5 installiert?



  • danke erstmal an davie und helium, SP ist installiert,
    aber der fehler lag wo anders und zwar am "using namespace std;"

    gruß elwida


Anmelden zum Antworten