String im Hauptprogramm an den eigenen Konstruktor übergeben



  • Hallo,

    ich bekomme folgendes nicht gelöst. Ich habe ein Programm mit mehreren Klassen (Vererbung). Nun habe ich eine Klasse CBus für diese Rufe ich im Hauptprogramm folgendes auf:
    CBus bus1(0,200,{'S','e','t','r','a'},88); //Hauptprogramm

    CBus(int,int,char,int); //Bus.h

    CBus::CBus(int _Km, int _PS,char _Typ, int _maxPerson)
    {
    iKm = _Km;
    iPS = _PS;
    cTyp = _Typ;
    imaxPerson = _maxPerson;
    }//Bus.cpp

    Wie kann ich dem Konstruktor den String mit dem Fzg-Type übergeben?

    Danke schon einmal!



  • {'S','e','t','r','a'} ist kein char.
    kannst da nur 'S' übergeben.



  • Oder du verwendest die Klasse String (statt char):

    #include <string>
    
    CBus::CBus(int _Km, int _PS,std::string _Typ, int _maxPerson)
    {
    iKm = _Km;
    iPS = _PS;
    cTyp = _Typ;
    imaxPerson = _maxPerson;
    }//Bus.cpp
    
    // dann machst du 
    CBus bus1(0,200,"Setra",88);
    // statt
    CBus bus1(0,200,{'S','e','t','r','a'},88);
    


  • Meistens wird für sowas was du machst, also einfache Zuweisungen, die Intialisierungsliste genommen. Macht in dem Falle jetzt vielleicht nicht viel aus, wird aber oft genutzt.



  • Besten Dank!

    @Chris++
    Gefällt mir sehr gut. Aber es geht noch nicht. Was schreibe ich dann in die .h bei meinem Konstruktor?

    CBus(int,int,std::string,int);

    //std::string anstatt char?

    Vielen Dank!



  • Ja natürlich. char ist was anderes als string. Aber bevor du fragst, hättest du es gleich testen können 😉



  • Ich habe ja getestet und gefragt, weil es so nicht geht.



  • muschelfinder schrieb:

    Besten Dank!

    @Chris++
    Gefällt mir sehr gut. Aber es geht noch nicht. Was schreibe ich dann in die .h bei meinem Konstruktor?

    Also ich würde die Headerdatei in beiden inkludieren (.h und .cpp). Bin mir jetzt aber nicht sicher ob das auch wirklich sein muss. Ansonsten solltest du dir, wie FreakY<3Cpp schon sagte, unbedingt noch Initialisierungslisten anschauen. Hier nochmal ein vollständiges Beispiel.

    // cbus.h
    #include <string>
    
    class CBus {
    private:
      int iKm;
      std::string cTyp;
      // usw...
    public:
      CBus(int _Km, int _PS,std::string _Typ, int _maxPerson);
    };
    
    // cbus.cpp
    #include <string>
    #include "cbus.h"
    
    // - damit kannst du "string" statt "std::string" schreiben (using namespace macht 
    //   noch ein bisschen mehr, aber das ist jetzt noch nicht so wichtig)
    // - using namespace aber NIE in eine .h Datei einfügen!
    using namespace std; 
    
    CBus::CBus(int _Km, int _PS, string _Typ, int _maxPerson)
    {
    iKm = _Km;
    cTyp = _Typ;
    // ... usw...
    }
    


  • 1000 Dank! Jetzt funktioniert es perfekt!

    Bin gerade beim Einstieg mit C++, da wird man ja am Anfang fast verrückt, so viele Fallen gibt es da. Hätte nie gedacht, dass dies so schwer ist!

    Viele Grüße!



  • war falscher Beitrag von mir, sry


Anmelden zum Antworten