C++ und Klassen

teufel964

Grünschnabel
Hallo Leute,

ich lerne C++. Im Buch von Dirk Louis im Kapitel 3 wurde der folgenden Script beschrieben:

die Datei Mitarbeiterverwaltung.cpp
C++:
// Mitarbeiterverwaltung.cpp: Hauptprojektdatei.
#include "StdAfx.h"
#include "Mitarbeiter.h"

using namespace System;

int main(array<System::String ^> ^args)
{
	Mitarbeiter ^billy =
		gcnew Mitarbeiter("Gates", "Bill", "3000");
	Mitarbeiter ^stevie =
		gcnew Mitarbeiter("Jobs", "Steve", "3500");
	//Daten ausgeben
	billy->DatenAusgeben();
	stevie->DatenAusgeben();

	// Gehaltvon billy erhöhen
	billy->GehaltErhöhen(500);

	// Kontrolle
	billy->DatenAusgeben();
	stevie->DatenAusgeben();

	return 0;
}

//Mitarbeiter.h

#pragma once
using namespace System;
ref class Mitarbeiter
{
	String	^name;
	String	^vorname;
	int		gehalt;
public:
	Mitarbeiter(String ^name, String ^vorname, int gehalt);
	void GehaltErhoehen(int erhoehung);
	void DatenAusgeben();
};
//Mitarbeiter.cpp 

#include "StdAfx.h"
#include "Mitarbeiter.h"

Mitarbeiter::Mitarbeiter(String ^name, String ^vorname, int gehalt)
{
	this->name = name;
	this->vorname = vorname;
	this->gehalt = gehalt;
}

void Mitarbeiter::DatenAusgeben()
{
	Console::WriteLine();
	Console::WriteLine("Name    :" + name);
	Console::WriteLine("Vorname :" + vorname);
	Console::WriteLine("Gehalt  :" + gehalt + " Euro");

}
void Mitarbeiter::GehaltErhoehen(int erhoehung)
{
	this->gehalt += erhoehung;
}
Ich bekomme folgende Fehlermeldung.
Code:
------ Erstellen gestartet: Projekt: Mitarbeiterverwaltung, Konfiguration: Debug Win32 ------
  stdafx.cpp
  AssemblyInfo.cpp
  Mitarbeiter.cpp
  Mitarbeiterverwaltung.cpp
Mitarbeiterverwaltung.cpp(10): error C2664: 'Mitarbeiter::Mitarbeiter(System::String ^,System::String ^,int)': Konvertierung des Parameters 3 von 'const char [5]' in 'int' nicht möglich
          Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
Mitarbeiterverwaltung.cpp(12): error C2664: 'Mitarbeiter::Mitarbeiter(System::String ^,System::String ^,int)': Konvertierung des Parameters 3 von 'const char [5]' in 'int' nicht möglich
          Es gibt keinen Kontext, in dem diese Konvertierung möglich ist
Mitarbeiterverwaltung.cpp(18): error C2039: 'GehaltErhöhen': Ist kein Element von 'Mitarbeiter'
          c:\users\rocco\documents\visual studio 2010\projects\mitarbeiterverwaltung\mitarbeiterverwaltung\Mitarbeiter.h(4): Siehe Deklaration von 'Mitarbeiter'
  Code wird generiert...
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
Nun bin ich nicht der Beste beim C++ programmieren, würde es aber gerne verstehen.

Wer kann helfen.

MfG

Teufel964
 
Zuletzt bearbeitet von einem Moderator:
Hi
Kannst du bitte den Code in zukunft in code-Tags packen (siehe meine Signatur)?

Der Fehler liegt darin, dass du den Konstruktor von Mitarbeiter mit drei String-Parametern statt 2 String-parametern und einem int aufrufst:
C:
// aus Mitarbeiterverwaltung.cpp
// falsch;
gcnew Mitarbeiter("Gates", "Bill", "3000");
// richtig:
gcnew Mitarbeiter("Gates", "Bill", 3000);
Genauso 2 Zeilen darunter in Mitarbeiterverwaltung.cpp
 
Zuletzt bearbeitet:
Hi

a) Bitte in Zukunft selbst Codetags machen


b) Das ist kein (normales) C++
System::,^, ref...
ist das Absicht oder glaubst du, dass es C++ sei (ein häufiges Missverständnis)?

Du verwendest hier Sachen von Microsofts .NET-Framework mit.
(Auch, wenn in Visual Studio einfach "C++" steht ist es ein C++,
mit dem kein anderer C++-Compiler Freude haben wird.)

Vorteil: Man kann Sachen schreiben, die übergreifend .NET und C++-Funktionalitäten verwenden
(egal, was man als "Hauptsprache" hat, ist von beiden Richtungen aus mischbar).

Nachteile: Es kann ziemlich umständlich bzw. problematisch bei
Mischung mit Echt-C++-Libraries werden.
Und es funktioniert nur auf Windows mit installiertem .NET-Framework.
Nicht auf jedem Windows. Und ggf. eine Portierung auf Linux...
wird dadurch auch alles andere als einfacher (eher Richtung sinnlos)


c) Einer der Compilerfehler: Erhöhen und Erhoehen ist ein Unterschied.
ö sollte besser überhaupt keines rein, diese Sachen
sind alle im englishsprachigen Raum entstanden.


d)
Du übergibst als dritten Konstruktorparameter (gehalt) zB. "3000"
"3000" ist ein String.
3000 wäre ein int.
Da muss ein int hin. Also weg mit den Anführungszeichen.
 
Hi Leute,

bitte um Entschuldigung. Werde mich bessern und den Text beim nächsten mal besser formatieren.

Danke aber erst einmal für die Info. Die Anführungszeichen habe ich nicht beachtet.

Danke nochmals

MfG

Teufel964
 
Zurück