Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

AKINCITÜRK

Frischling

  • »AKINCITÜRK« ist der Autor dieses Themas

Beiträge: 8

Wohnort: Mannheim

  • Private Nachricht senden

1

17.02.2007, 23:35

Problem mit Klassen -> C++

Habe ein problem mit Klassen. Den Code, siehe unten, habe ich aus dem Buch: "C++ in 21 Tagen - Jesse Liberty"

Ich verstehe nicht was die Fehlermeldungen zu bedeuten haben :?

Ich benutze "Visual Studio Standard Edition".

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Listing 3.6

// Zeigt die Deklaration einer Klasse und

// die Definition von Klassenmethoden



#include <iostream>

using namespace std;

class Cat
{
public:
int GetAge();
void SetAge(int age);
void Meow();
private:
int itsAge;
};

int Cat::GetAge()
{
return itsAge;
}

void Cat::SetAge(int age);
{
itsAge = age;
}

void Cat::Meow();
{
cout << "Miau.\n";
}

int main()
{
Cat Frisky;
Frisky.SetAge(5);
Frisky.Meow();
cout << "Frisky ist eine Katze, die ";
cout << Frisky.GetAge() << " Jahre alt ist.\n";
Frisky.Meow();
return 0;
}


Fehlermeldung:

Zitat

1>------ Erstellen gestartet: Projekt: Listings, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>listing_6_3.cpp
1>c:\dokumente und einstellungen\...\visual studio 2005\projects\listings\listings\listing_6_3.cpp(25) : error C2761: 'void Cat::SetAge(int)': Die erneute Deklaration der Memberfunktion ist unzulässig
1>c:\dokumente und einstellungen\...\visual studio 2005\projects\listings\listings\listing_6_3.cpp(26) : error C2447: '{': Funktionskopf fehlt - Parameterliste im alten Stil?
1>c:\dokumente und einstellungen\...\visual studio 2005\projects\listings\listings\listing_6_3.cpp(30) : error C2761: 'void Cat::Meow(void)': Die erneute Deklaration der Memberfunktion ist unzulässig
1>c:\dokumente und einstellungen\...\visual studio 2005\projects\listings\listings\listing_6_3.cpp(31) : error C2447: '{': Funktionskopf fehlt - Parameterliste im alten Stil?
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\...\Visual Studio 2005\Projects\Listings\Listings\Debug\BuildLog.htm" gespeichert.
1>Listings - 4 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Danke im voraus.[/code]

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

2

17.02.2007, 23:37

die semikolon nach der Deklaration weg

falsch

C-/C++-Quelltext

1
2
3
4
void Cat::Meow();
{
cout << "Miau.\n";
}



richtig

C-/C++-Quelltext

1
2
3
4
void Cat::Meow()
{
cout << "Miau.\n";
}

3

17.02.2007, 23:39

Es liegt am Semikolon. Bei der Funktionsdefinition in der Klasse ist es ok da die Funktion dort keinen Körper deklariert.

Jedoch unten wo du die Funktionen schreibst darf kein Semikolon hin da du die Funktion sonst nur definierst. Der folgende Funktionskörper wird dann auch nicht berücksichtigt.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Listing 3.6 

// Zeigt die Deklaration einer Klasse und 

// die Definition von Klassenmethoden 



#include <iostream> 

using namespace std; 

class Cat 
{ 
public: 
int GetAge(); 
void SetAge(int age); 
void Meow(); 
private: 
int itsAge; 
}; 

int Cat::GetAge() 
{ 
return itsAge; 
} 

void Cat::SetAge(int age) 
{ 
itsAge = age; 
} 

void Cat::Meow() 
{ 
cout << "Miau.\n"; 
} 

int main() 
{ 
Cat Frisky; 
Frisky.SetAge(5); 
Frisky.Meow(); 
cout << "Frisky ist eine Katze, die "; 
cout << Frisky.GetAge() << " Jahre alt ist.\n"; 
Frisky.Meow(); 
return 0; 
}


Bei GetAge() hattest du es richtig ;)

EDIT: Die Lösung von koschka stand eben noch nciht da :D

AKINCITÜRK

Frischling

  • »AKINCITÜRK« ist der Autor dieses Themas

Beiträge: 8

Wohnort: Mannheim

  • Private Nachricht senden

4

17.02.2007, 23:43

Ich blödi :doubt: :(

Danke für die Antworten.

5

18.02.2007, 00:06

hmm "using namespace std;" wasn das? ^^

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
int main()
{
    Cat Frisky;
    Frisky.set_age(5); // Würdest du das rauslassen und keinen eigenen Konstruktor definieren könnte dir get_age nen bissel was komisches liefern ^^

    Frisky.Meow();
    std::cout << "Frisky ist eine Katze, die " << Frisky.get_age() << " Jahre alt ist." << std::endl;
    Frisky.Meow();
    
    return 0;
}


und dementsprechend dann auch der Rest:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>

class Cat
{
public:
    Cat(void) : m_Age(0) {}
    ~Cat(void) {}

public:
    int get_age(void) { return m_Age; }
    void set_age(int age) { m_Age = age; }

public:
    void Meow(void);

private:
    int m_Age;
};

void Cat::Meow()
{
    std::cout << "Miau." << std::endl;
} 
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

AKINCITÜRK

Frischling

  • »AKINCITÜRK« ist der Autor dieses Themas

Beiträge: 8

Wohnort: Mannheim

  • Private Nachricht senden

6

18.02.2007, 00:10

Öh, soweit bin ich noch nicht :(

Werbeanzeige