[C++] Mein erstes objektorientiers Programm will nicht

byte_head

Captain
Registriert
Jan. 2005
Beiträge
3.674
Hi,

ich habe mich nun an der objektprogrammierten Version meines kleinen Programmes versucht, welches folgendes ausführt.

Der Benutzer gibt 2 Zahlen ein (1x klein 1x groß)

Nun zählt das Programm bei der kleineren 1 dazu und zieht bei der größeren 1 ab...
Bis sich die Zahlen treffen.

Das ganze soll mit (klein+groß)/2 überprüft werden.

So habe ich mir das vorgestellt:

Wichtig! Ich hänge schon bei den ersten Zeilen der Fehlermeldung,
also die unteren habe ich noch nicht "bearbeitet"...


header.h

Code:
#include <iostream>

using namespace std;

class Rechnung
{
      public:
             Rechnung(); // Konstruktor
             ~Rechnung(); // Dekonstruktor

	      	int vorgang(int zahl1, int zahl2); // z1+z2/2
      
}

class Counter      
{

	public:
		Counter(); // Konstruktor
		~Counter(); // Dekonstruktor
	
		int zaehler(int zahl1, int zahl2); // ++ und --
}

main.cpp

Code:
#include "header.h"

Rechnung::Rechnung()
{

}

Rechnung::~Rechnung()
{

}

Counter::Counter()
{

}

Counter::~Counter()
{

}


int Rechnung::vorgang(int zahl1, int zahl2)
{
	int ergebnis;
	ergebnis = (z1+z2)/2;
	return ergebnis; // Wird später abgeglichen!
}

int Counter::zaehler(int zahl1, int zahl2)
{
	while(zahl1 < zahl2 && zahl2 > zahl1) // Bis beide gleich groß sind!
	{ 
	zahl1++; // Inkrementieren
	zahl2--; // Dekrementieren   
	cout << "Zahl1: " << zahl1 " " << "Zahl2: " << zahl2 << endl;	
	}  
	
	cout << "Ergebnis: " << zahl1 << " " << zahl2 << endl;
	return zahl1;
}


int main()
{
    Rechnung Rech; // Erstellung eines Objektes
    int zahl1; 
    int zahl2;
    cout << "Geben sie eine kleine Zahl ein: " << endl;
    cin >> zahl1;
    cout << "Geben sie eine zweite große Zahl ein: " << endl;
    cin >> zahl2;
	
	if(zahl1 < zahl && zahl1 < 1000 && zahl2 < 1000 && zahl1 > 0 && zahl2 > 0)
	{
    	Rech.vorgang(zahl1,zahl2); // Methode des Objektes Rech & der Klasse Rechnung
    	cout << "Das Ergebnis ist = " << ergebnis << endl; // Fällt in der Final weg, zur Kontrolle...
	
	Counter Zaehler;
	
	Zaehler.zaehler(int zahl1, int zahl2); // Methode des Objektes Zaehler & der Klasse Counter
	
	if(zahl1 == ergebnis)
		{
			cout << "Erfolg!" << endl;
		
		}
	
  	else

	{ 
	  cout << "Ihre Zahlen waren zu gross und/oder negativ!" << endl;
	  cout << "Bitte fangen Sie von vorne an!" << endl;
	// GOTO ANFANG!
	}
	
    cin.get();
    return 0;
}

Das spuckt mir meine Bash aus:

Bash schrieb:
johannes@johannes-desktop:~/cpp/V2$ gcc main.cpp
In file included from main.cpp:1:
header.h:23:2: warning: no newline at end of file
main.cpp:3: error: new types may not be defined in a return type
main.cpp:3: note: (perhaps a semicolon is missing after the definition of ‘Rechnung’)
main.cpp:3: error: two or more data types in declaration of ‘Rechnung’
main.cpp:3: error: return type specification for constructor invalid
main.cpp: In member function ‘int Rechnung::vorgang(int, int)’:
main.cpp:27: error: ‘z1’ was not declared in this scope
main.cpp:27: error: ‘z2’ was not declared in this scope
main.cpp: In member function ‘int Counter::zaehler(int, int)’:
main.cpp:37: error: expected `;' before string constant
main.cpp: In function ‘int main()’:
main.cpp:55: error: ‘zahl’ was not declared in this scope
main.cpp:58: error: ‘ergebnis’ was not declared in this scope
main.cpp:62: error: expected primary-expression before ‘int’
main.cpp:62: error: expected primary-expression before ‘int’
main.cpp:80: error: expected `}' at end of input
johannes@johannes-desktop:~/cpp/V2$

Vielen Dank schonmal, ich blick atm wirklich 0 durch. :(
 
int Rechnung::vorgang(int zahl1, int zahl2)
...
ergebnis = (z1+z2)/2;

ich schätz mal mit z1 und z2 meinst du zahl1 und zahl2...;)
 
header.h:23:2: warning: no newline at end of file
Hinter die Definitionen der Klassen gehören Semikoli.
-----------------------------



main.cpp:3: error: new types may not be defined in a return type
main.cpp:3: note: (perhaps a semicolon is missing after the definition of ‘Rechnung’)
main.cpp:3: error: two or more data types in declaration of ‘Rechnung’
main.cpp:3: error: return type specification for constructor invalid
Hängt wohl mit dem ersten Fehler zusammen.
-----------------------------



main.cpp: In member function ‘int Rechnung::vorgang(int, int)’:
main.cpp:27: error: ‘z1’ was not declared in this scope
main.cpp:27: error: ‘z2’ was not declared in this scope
Geklärt durch Vorpost.
-----------------------------


main.cpp: In member function ‘int Counter::zaehler(int, int)’:
main.cpp:37: error: expected `;' before string constant
Code:
cout << "Zahl1: " << zahl1 [COLOR="Red"]<<[/COLOR] " " << "Zahl2: " << zahl2 << end;
Müsste es heißen.
-----------------------------





main.cpp: In function ‘int main()’:
main.cpp:55: error: ‘zahl’ was not declared in this scope
main.cpp:58: error: ‘ergebnis’ was not declared in this scope
Naja zahl ist halt nirgendwo deklariert und ergebnis noch weniger...
-----------------------------



main.cpp:62: error: expected primary-expression before ‘int’
main.cpp:62: error: expected primary-expression before ‘int’
Code:
Zaehler.zaehler(int zahl1, int zahl2);
Die ints müssen weg....
-----------------------------




main.cpp:80: error: expected `}' at end of input
Das erste if wird nicht geschlossen so wie ich das sehe...
-----------------------------



mfg

EDIT: Alle Angaben ohne Gewehr ;)
 
Im Header fehlen auch noch die Include-Guards. Nicht tragisch, weil du den Header nur in einer Übersetzungseinheit (main.cpp) verwendest, aber grundsätzlich sollten die immer da sein.
 
Er macht Anfängerfehler und du redest von Include-Guards :D

EDIT: Oh, ich sehe du gehst pädagogisch wertvoll vor... Gibt dazu genug im Netz. Gute Idee :)
 
Naja, vor allem kriegt man ohne Include Guards teilw. sehr kryptische Compilermeldungen, mit denen man besonders als Anfäger nix anfangen kann - also sollte man sie das so schnell wie möglich angewöhnen ;)
 
Zurück
Oben