kostenloser Webspace werbefrei: lima-city


Problem bei Parameterübergabe

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    myhead

    myhead hat kostenlosen Webspace.

    Also ich habe eine aufgabe und da soll dem Konstruktor ein Parameter mit übergeben werden:
    hab hier maln bsp. wie ichs gemacht hab.

    string m_Name;
    
    public:
    //Konstruktor
    Konstruktor_KlassenName(string m_Name);

    KlassenName::Konstruktor_KlassenName(string m_Name)
    {
            setName(m_Name);
    }


    beim erstellen kommt der Fehler: error C2512: Kein geeigneter Standardkonstruktor verfügbar

    Hier mal die Main
    int main(){
    
    Klasse object;         //hier soll angeblich der Fehler sein.
    object.show();
    
    return 0;


    in show() werden lediglich die werte ausgegeben.


    Beitrag geändert: 27.3.2008 23:21:40 von myhead
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Wenn du
    Klasse object;
    schreibst, wird der Standard-Konstruktor, also Klasse() aufgerufen, der bei dir aber nicht existiert.

    Wenn du
    Klasse *object = new Klasse(\"blubb\");
    object->show();

    schreibst, gehts vermutlich.




    (In c++ ungeübt, erwarte deshalb nich zuviel ;))



    Beitrag geändert: 27.3.2008 23:28:44 von planschkuh
  4. Autor dieses Themas

    myhead

    myhead hat kostenlosen Webspace.

    ohne parameter funzts es...nur mal so^^

    das problem ist ich lerne für eine Klassenarbeit und das haben wir so noch nie gemacht^^ deswegen lasse ich das lieber.

    kann vllt. mal jemand ein codeschnipsel schicken wo man dem konstruktor parameter übergeben werden und ausgegeben werden.

    wenn nicht dann lass ich das^^ weil wir das ja nicht gemacht haben mit parameter übergabe^^


    Beitrag geändert: 28.3.2008 10:09:15 von myhead
  5. Autor dieses Themas

    myhead

    myhead hat kostenlosen Webspace.

    ich hab das Problem gelöst:

    In der main bei der object erstellung:
    int main(){
    
    Klasse object(\"String\");         //hier muss der parameter \"gesetzt\" sein
    object.show();
    
    return 0;
  6. foo.h
    [...] Includes usw [...]
    
    class foo {
      public:
        foo(std::string bar);
        ~foo();
    };
    
    foo::foo(std::string bar) {
      cout<<bar<<\"\\n\";
    }
    
    foo::~foo {
      cout<<\"U don\'t like foobar, dont u?\\n\";
    }


    main.cpp
    [...] Includes un so [...]
    #include \"foo.h\"
    
    int main() {
      foo* obj;
      obj=new foo(\"BAR!\");
      
      return 0;
    }



    Ungetestet^^
  7. knappenkapelle

    knappenkapelle hat kostenlosen Webspace.

    Dein Compiler-Fehler sagts eigentlich eh recht klar ;-)
    C2512: Kein geeigneter Standardkonstruktor verfügbar...

    Da du nur den \"default\" Konstruktor (ohne Parameter) aufgerufen hast, hat der Compiler nicht gewußt, was er für m_Name verwenden sollte.
    Also entweder mußt du immer den string im Konstruktor setzen, oder du mußt einen Konstruktor ohne Parameter (default Konstruktor) verwenden, der dann im Konstruktor einen default Namen (meist privat) für die weitere Verwendung setzt.

    ...Includes...
    class foo {
        public:
            foo();
            foo(std::string bar);
            ~foo();
    
        private:
            std::string _bar;
    };




    ...Includes...
    
    foo::foo()
    {
          _bar = \"myDefaultBar\";
          cout<< _bar <<\"\\n\";
    }
    
    
    foo::foo(std::string bar)
    {
          _bar = bar;
          cout<< _bar <<\"\\n\";
    }


    Und dann könntest du auch ganz einfach eine Setter/Getter Methode für deinen private string machen um das vielleicht auch nachträglich zu ändern/auszulesen...

    void SetPrivateBar(std::string bar)
    {
          _bar = bar;
    }
    
    std::string GetPrivateBar()
    {
          return _bar;
    }



    Is ungetestet, hoffe aber es hilft dir...
  8. Auch wenn der Thread vorher ungetestet ist, ich bin mir ziemlich sicher, dass das so funktionieren muss!! Einen Standard-Konstruktor und einen \"Standard\"-Konstruktor mit Parameter!

    Zur Setter/Getter Methode! Das sind 2 Methoden, die ich eigentlich bei fast all meinen Klassen verwende, da man die Attribute einer Klasse IMMER private setzen sollte!

    MfG

    David

  9. stefanlachner

    stefanlachner hat kostenlosen Webspace.

    les mal was nach über tiefe und flache kopien eines objekts.
    Solltest du nämlich mit dem heap arbeiten, kann es bei flachen Kopien zu Fehlern kommen, wenn versucht wird, auf ein bereits gelöschtes objekt zuzugreifen.

    Stefan
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!