Initialisierung über Konstruktor



  • Hallo,

    irgendwie schaffe ich es nicht strings über den Konstruktor zu initialisieren. Integer-Variablen gehen problemlos, aber keine char Elemente. Der Compiler meldet keinen Fehler aber der Name als string wird nicht ausgegeben. Wieso nicht?

    #include "stdafx.h"
    #include <conio.h>
    #using <mscorlib.dll>
    
    using namespace System;
    using namespace std;
    
    class tiere
    {
    	public:
    		void SetAge(int age)
    		{
    			itsAge = age;
    		}
    
    		int GetAge()
    		{
    			return itsAge;
    		}
    
    	protected:
    		int itsAge, itsGewicht;
    		char itsName[9];
    };
    
    class hund : public tiere
    {
    
    	public: 
    		hund(int nummer, char name[9])
    		{
    			itsNummer = nummer;
    			itsName[9] = name[9];
    		}
    
    		void bellen()
    		{
    			cout<<"Wow, Wow";
    		}
    
    		void changeAge(int age)
    		{
    			itsAge = age;
    		}
    
    		int itsNummer;
    
    		char GetName()
    		{
    
    			return itsName[9];
    		}
    };
    
    class katze : public tiere
    {
    
    };
    
    class mensch
    {
    };
    void main()
    {
    	hund h1(123,"Fido");
    	h1.GetName();
    	cout<<" Der Hund heißt "<<h1.GetName()<<"\n";
    	h1.SetAge(4);
    	cout<<h1.GetName()<<" ist "<<h1.GetAge()<<" Jahre alt\n";
    	cout<<"Ein paar Jahre vergehen\n";
    	h1.changeAge(6);
    	cout<<h1.GetName()<<" ist nun "<<h1.GetAge()<<" Jahre alt\n";
    	cout<<"Ach ja und seine nummer ist "<<h1.itsNummer;
    	getch();
    }
    

    Für eine Lösung wäre ich euch sehr dankbar !!!



  • Dein Tier-Konstruktor ist schon mal nicht gut. Der sollte das char[9] als Parameter verlangen, so dass der Hund-Konstruktor dann den Tier-Konstruktor füttern muss. Außerdem weist du bei itsName[9] = name[9]; nur das zehnte zeichen zu. Du musst das ganze Array zuweisen, also itsName = name.

    Vielleicht verschiebt dich jetzt noch ein Mod nach C++/CLI. 😉



  • Oh und außerdem ist dein itsName[9] = name[9]; auch noch illegal, weil du das zehnte Zeichen im Array liest und schreibst, das Array ist aber nur 9 Zeichen lang.



  • Dieser Thread wurde von Moderator/in CMatt aus dem Forum C# und .NET in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Die Klasse hat zwar überhaupt nichts mit C++/CLI zu tun...
    Wenn Du C++ machst, dann verwenden bitte "std::string" zum Speichern von Strings!
    Also:

    class hund : public tiere
    {
        public:
            hund(int nummer, const char *name)
            {
                itsNummer = nummer;
                itsName = name;
            }
    
            std::string GetName()
            {
    
                return itsName;
            }
      std::string itsName;
    };
    

    Und wenn Du schon C++/CLI machst, dann solltest Du "System::String" verwenden!



  • erst Initialisierungen dann Konstruktoren

    man initialisiert nicht im Konstruktor
    (hab ich zumindest mal gelernt)

    EDIT: Oh wir sind gar nicht mehr in C# ich hätte genauer lesen sollen 😉



  • Hmmm... alo itsName = name geht nicht. da kommt bekomme ich einen Fehler wegen der Konvertierung. Wenn ich itsName[1] = name [1] mache wird als Name ein "i" ausgegeben 😃 ist auch irgendwo logisch. Muss ich denn nicht ein Stringcopy machen um den ganzen Namen auszugeben??? 😕

    P.S.: Das mit dem std::String schau ich mir mal an.



  • Sorry, ich weiß das Doppelposts nicht erlaubt sind aber ich hab es jetzt irgendwie aus Zufall geschafft das es läuft. Aber das Problem ist jetzt, dass ich nicht weiß was ich da gemacht habe 🙄 ich weiß klingt doof ist aber so.
    ich habe einfach ein Sternchen() an den Rückgabetyp der funktion "GetAge" dran gemacht und schon geht alles. Aber warum? Mit "" definiert man doch variablen vom typ zeiger. der stern steht aber jetzt vor einer Funktion. Kann mir das mal bitte jemand erläutern?

    #include "stdafx.h"
    #include <conio.h>
    #using <mscorlib.dll>
    
    using namespace System;
    using namespace std;
    
    class tiere
    {
    	public:
    		void SetAge(int age)
    		{
    			itsAge = age;
    		}
    
    		int GetAge()
    		{
    			return itsAge;
    		}
    
    	protected:
    		int itsAge, itsGewicht;
    		char itsName[9];
    };
    
    class hund : public tiere
    {
    
    	public: 
    		hund(int nummer, char name[])
    		{
    			itsNummer = nummer;
    			strcpy(itsName,name);
    			//itsName[] = name[];
    		}
    
    		void bellen()
    		{
    			cout<<"Wow, Wow";
    		}
    
    		void changeAge(int age)
    		{
    			itsAge = age;
    		}
    
    		int itsNummer;
    
    		char* GetName()
    		{
    
    			return itsName;
    		}
    };
    
    class katze : public tiere
    {
    
    };
    
    class mensch
    {
    };
    void main()
    {
    	hund h1(123,"Fido");
    	h1.GetName();
    	cout<<"Der Hund heißt "<<h1.GetName()<<"\n";
    	h1.SetAge(4);
    	cout<<h1.GetName()<<" ist "<<h1.GetAge()<<" Jahre alt\n";
    	cout<<"Ein paar Jahre vergehen\n";
    	h1.changeAge(6);
    	cout<<h1.GetName()<<" ist nun "<<h1.GetAge()<<" Jahre alt\n";
    	cout<<"Ach ja und seine nummer ist "<<h1.itsNummer;
    	getch();
    }
    

Anmelden zum Antworten