C++ !HELP! Programm

Swift-Kill

Enthusiast
Thread Starter
Mitglied seit
08.05.2004
Beiträge
43
Ort
NRW
Hi,

habe hier ein Programm aus unserem Infobuch.
Ich habe allerdings gemerkt, das im Buch Fehler vorhanden sind
( String muss gegen Char ausgetauscht werden).

Leider hat das Programm in Zeile 40 einen Fehler, den ich nicht nachvollziehen kann.

Hier der Fehler:

E:\schule\prpo\ANGESTEL.CPP(40) : error C2664: '__thiscall Angestellter::Angestellter(char,char,double)' : Konvertierung des Parameters 1 von 'char [6]' in 'char' nicht moeglich


Quellcode :

//------------------------Program: Angestellter1.CPP----------------
#include <iostream.h>
#include <conio.h>
//------------------------------------------------------------------
class Angestellter
{
private:
char Nachname;
char Vorname;
double Brutto;
public:
// Methoden
double ZeigBrutto(void);
void SchreibBrutto(double);
// Konstruktor
Angestellter(char,char,double);
// Destruktor
~Angestellter();
};
double Angestellter::ZeigBrutto(void)
{
return Brutto;
}
void Angestellter::SchreibBrutto(double B)
{
Brutto = B;
}
Angestellter::Angestellter(char N, char V, double B)
{
Nachname = N;
Vorname = V;
Brutto = B;
}
Angestellter::~Angestellter()
{
}
int main()
{
double Bruttolohn;
Angestellter Angestellter1("Meier", "Franz", 2000.0);

Bruttolohn Angestellter1.ZeigBrutto();
cout << "Bruttolohn : " << Bruttolohn << endl;
Angestellter1.SchreibBrutto(3000.0);
Bruttolohn = Angestellter1:ZeigBrutto();
cout << "Bruttolohn : "<< Bruttolohn << endl;
getch();
return 0;
}
//-----------------------------------------------------------------



Hoffe Ihr könnt mir weiterhelfen, dies wird eine Aufgabe in unserer nächsten Info-Klausur sein (OOP = Objektorientierung) =))
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
welche zeile ist denn zeile 40?

auf anhieb seh ich aber auch nichts was den fehler verursachen könnte
 
Oh, oh, das sieht ja alles schlimm aus. Du solltes vielleicht auch dazu schreiben welchen Compiler bzw. welches Betriebssystem du benutzt.

1. char ist ein einzelnen Zeichen - 'Meier' sind 5 oder 6 Zeichen - das geht nicht.
2. ein char array kann nicht mit einem '=' Zeichen kopiert werden, man muß in
einer Schleife Zeichen für Zeichen kopieren.
3. Nimm lieber String-Variablen, die können mit '=' kopiert werden.
4. Je nach Compiler und Betriebssystem sind die #include Anweisungen etwas
unterschiedlich. Du solltest mal das '.h' am ende weglassen.
5. ohne das '.h' evtl. nach den includes ein 'using namespace std;' anhängen.
6. Wenn du doch mit char arrays arbeiten möchtest solltest du auch mit Zeigern
als Übergabe an die Funktionen arbeiten:
Angest::Angest( char * N, char * v, double B )
(nicht empfehlenswert)

So läuft es bei mir (Visual c++ / WinXP)

// demo.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//

#include "stdafx.h"

#include<iostream>
#include<string>
#include<conio.h>
using namespace std;

class Angestellter
{
private:
string Nachname;
string Vorname;
double Brutto;

public:

// Konstruktor
Angestellter(string nn, string vn, double bl)
: Nachname(nn), Vorname(vn), Brutto(bl) {};

// Destruktor
~Angestellter() {};


// Methoden
double ZeigBrutto (void) { return Brutto; };
void SchreibBrutto (double bl) { Brutto = bl; };
};

int main()
{
Angestellter A1("Meier", "Franz", 2000.0);

cout << "Bruttolohn : " << A1.ZeigBrutto() << endl;
A1.SchreibBrutto(3000.0);
cout << "Bruttolohn : "<< A1.ZeigBrutto() << endl;

getch();

return 0;
}
 
Pardon ... habe mich in meinem Beispielprog. etwas kurz gefasst.

Bei einem Konstruktor (und nur dort) kann man Objektvariablen initialisieren
in dem man nach dem Funktionskopf einen Doppelpunkt schreibt und danach
den Variablennamen mit dem Initialisierungswert in Klammern.

Innerhalb einer Klassendeklaration -> class ... { ... }; <- kann man den Code
gleich hinter die deklaration der Funktionen schreiben, aber bitte nur mini-Code.
Die Schreibweise - Klassenname::Methode(...) {} - ist eher für seperate Files
gedacht (Klassenname.h - header file und Klassenname.cpp code file)
 
@Jotti
bin ziemlicher c++-Anfänger.

das ' using namespace std;' im Header:

Zu was brauche ich das?
 
Mal eine Frage, wie kommst Du auf eine Idee Klassendeklaration und die Methoden der Klasse in eine .cpp-Datei zu packen?

Klassendeklaration gehört in eine .h -Datei und die Methoden (sprich Funktionen) gehören in eine .cpp-Datei, zumindest habe ich so gelernt.

Ansonsten tritt der Fehler auf, wenn Du irgendwo bei der Parameterübergabe geschlampt hast, sprich was falsches übergibst. Ein Pointer anstelle einer Variable etc.

Hoffe konnte Dir helfen.

Oder schick mir einfach den Quellcode, so wie Du ihn hast, ich habe hier aber nur Borland C++ Builder 5.x und 6.0.

'cuda
 
Zuletzt bearbeitet:
using namespace std;

Innerhalb einer Klasse können statische Variablen, Funktionen oder Konstanten
deklariert werden. Statische Variablen, ... existieren nur ein mal pro Klasse (nicht
ein mal pro Objekt). Man könnte z.B. eine Klassenmethode (statsch)
'static double BerechneDurchschnittsGehalt( void );' deklarieren. Innerhalb eines
Programms müsste die Funktion so aufgerufen werden:
d=Angestellter::BerechneDurchschnittsGehalt();
D.h. das der Klassenname mit genannt werden muss. Wenn man öfter auf statische
Variablen, ... zugreifen muss ist es angenehmer hierfür 'namespace' bereiche zu
definieren. dadurch ist es möglich die Funktionen,... ohne führende Klassennamen
aufzurufen. 'namespace std' enthält Definitionen für viele der mitgelieferten Klassen.
Ich mache mir ehrlich gesagt keine Gedanken darüber wann oder wo ich das brauche,
ich schreib' es immer mit dazu.
Gruß JO
 
ok, danke.

Ohne das namespace gehen nämlich strings garnicht.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh