code verursacht fehler



  • Hallo,
    ich versuche c++ zu lernen, und bin gerade beim überladen von operatoren.
    Ich habe folgendes Programm geschrieben, aber es verursacht einen fehler und wird beendet. Ich verstehe nicht warum 😕

    //firma.h
    #include <string>
    #ifndef FIRMA_H
    #define FIRMA_H
    
    class Firma
    {
     private:
            std::string Name;
            std::string Firmen[10];
            int Val; 
     public:
            Firma(std::string);
            std::string name();
            void firmen(); 
            void operator+(Firma &f);
            Firma& operator<<(Firma &f);     
    };
    #endif
    
    //firma.cpp
    #include "firma.h"
    #include <iostream>
    
    Firma::Firma(std::string name) :
                             Name(name)
    {
    
    }
    
    std::string Firma::name()
    {
     std::cout << "Firmenname: " << Name << std::endl;            
    }
    
    void Firma::firmen()
    {
     int i = 0;
     std::cout << "Uebernomene Firmen" << std::endl;
     std::cout << "------------------" << std::endl;
     while ( Firmen[i] != "" && i < 10 )
           {
            std::cout << Firmen[i] << std::endl;            
           }     
    }
    
    void Firma::operator+(Firma& f)
    {
     Name += "-" + f.Name;
     f.Name = Name;            
    }
    
    Firma& Firma::operator<<(Firma &f)
    {
     Firmen[Val] = f.Name;
     ++Val; 
     return *this;      
    }
    
    //main.cpp
    #include <iostream>
    #include "firma.h"
    
    int main(int argc, char *argv[])
    {
    
        Firma f1("Stein");
        Firma fa("Mueller");
    
        f1.name();
    
        fa.name();
    
        f1 + fa;
    
        f1.name();
        fa.name();
    
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    

    Danke schon mal vorab.



  • Welcher Compiler akzeptiert denn so einen Code? Nicht mal eine Warnung?

    Firma::name soll laut Deklaration einen String zurückgeben, eine return-Anweisung ist aber nirgends zu sehen.



  • Das was der + Operator dort macht, hätte ich eher vom += Operator erwartet. Und selbst das nicht, weil beiden Objekten der Inhalt zugewiesen wird. Du solltest dir im C++-Magazin vielleicht mal Überladung von Operatoren in C++ (Teil 1) ansehen. Außerdem ist es empfehlenswert Val im Konstruktor mit 0 zu initialisieren, statt uninitialisiert zu verwenden. Im Konstruktor und in operator<< kannst du den Parameter konstant machen (std::string const &name; Firma const &f). Und ich würde beim Konstruktor auch im Header einen Variablennamen angeben, damit man gleich sieht, was dort eigentlich erwartet wird. Bei den Operatoren hast du es auch gemacht, und das obwohl es dort deutlicher ist als im Konstruktor. Es verwirrt vor allem, wenn man im Konstruktor mehrere Parameter gleichen Typs hat (ist hier bisher noch nicht der Fall). Wenn man die cpp-Datei nicht hat, ist es nur verwirrend und man muss immer in die Doku gucken, sofern es eine gibt.

    Wo der Fehler sehr wahrscheinlich liegt hat MFK bereits erwähnt. Wenn die Anwendung abstürzt wäre es aber von Vorteil zu wissen wo sie abstürzt. Das kannst du mit dem Debugger in der Regel gut herausfinden.

    Greetz



  • Danke ich war wohl blind.
    Hab es jetzt geendert und es funktioniert.


Anmelden zum Antworten