PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++/CLI Konsolenanwendung spackt...



Tyc0rc
30.10.2008, 20:48
hallo leute :p
ich hab n bissel angefangen mit C++/CLI
(.Net Laufzeitumgebung)

Also das Buch das ich Lese
("Jetzt lerne ich Visual C++ 2008")
hat mir die ersten 2 Kapitel nur Theorie an die Birne geschmissen... jetzt da ich ein bisschen syntax gelernt habe hab ich versucht nen simplen Rechner zu schreiben.

hier die ganze source:



#include stdafx.cpp

using namespace system;

int main()
{
double nummer1;
double nummer2;
double ende;
string ^name;
string ^input1;
string ^input2;

Console::WriteLine("Bitte Namen eingeben:");
name = Console::WrtieLine();

Console::WriteLine("Hallo " + name " bitte geben sie die erste Zahl ein:");

input1 = Console::ReadLine();
nummer1 = Convert::ToInt64(input1);

Console::WriteLine(name + ", Ihre erste zahl lautet "+ nummer1);
Console::WriteLine(name + ", bitte geben sie die zweite zahl ein:");

input2 = Console::ReadLine();
nummer2 = Convert::ToInt64(input2);

ende = nummer1 + nummer2;

Console::WriteLine(+name ", Ihre ersta zahl lautete "+ nummer1 " und ihre zweite zahl lautet " + nummer2);
Console::WriteLine("Daraus ergeibt sich:" + ende);
Console::ReadLine();


}


aber ich bekomme die Fehlermeldung


Fehler 1 error C2871: 'system': Es ist kein Namespace mit diesem Namen vorhanden c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 4
Fehler 2 error C2065: 'string': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 11
Fehler 3 error C2065: 'name': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 11
Fehler 4 error C2065: 'string': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 12
Fehler 5 error C2065: 'input1': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 12
Fehler 6 error C2065: 'string': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 13
Fehler 7 error C2065: 'input2': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 13
Fehler 8 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 15
Fehler 9 error C3861: "WriteLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 15
Fehler 10 error C2065: 'name': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 16
Fehler 11 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 16
Fehler 12 error C3861: "WrtieLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 16
Fehler 13 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 18
Fehler 14 error C2065: 'name': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 18
Fehler 15 error C2143: Syntaxfehler: Es fehlt ')' vor 'Zeichenfolge' c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 18
Fehler 16 error C2059: Syntaxfehler: ')' c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 18
Fehler 17 error C2065: 'input1': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 20
Fehler 18 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 20
Fehler 19 error C3861: "WriteLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 18
Fehler 20 error C3861: "ReadLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 20
Fehler 21 error C2653: 'Convert': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 21
Fehler 22 error C2065: 'input1': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 21
Fehler 23 error C3861: "ToInt64": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 21
Fehler 24 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 23
Fehler 25 error C2065: 'name': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 23
Fehler 26 error C3861: "WriteLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 23
Fehler 27 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 24
Fehler 28 error C2065: 'name': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 24
Fehler 29 error C3861: "WriteLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 24
Fehler 30 error C2065: 'input2': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 26
Fehler 31 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 26
Fehler 32 error C3861: "ReadLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 26
Fehler 33 error C2653: 'Convert': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 27
Fehler 34 error C2065: 'input2': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 27
Fehler 35 error C3861: "ToInt64": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 27
Fehler 36 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 31
Fehler 37 error C2065: 'name': nichtdeklarierter Bezeichner c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 31
Fehler 38 error C2143: Syntaxfehler: Es fehlt ')' vor 'Zeichenfolge' c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 31
Fehler 39 error C2059: Syntaxfehler: ')' c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 31
Fehler 40 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 32
Fehler 41 error C3861: "WriteLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 31
Fehler 42 error C3861: "WriteLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 32
Fehler 43 error C2653: 'Console': Keine Klasse oder Namespace c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 33
Fehler 44 error C3861: "ReadLine": Bezeichner wurde nicht gefunden. c:\Dokumente und Einstellungen\abuse\Eigene Dateien\Visual Studio 2008\Projects\b\b.cpp 33


was mache ich da falsch?

mfg euer Ty

Master of Chaos
30.10.2008, 20:54
Probier mal statt "namespace system" "namespace std" zu nehmen. So hab ich es zumindest gelernt.

LG,
Master of Chaos

Tyc0rc
30.10.2008, 21:08
hmm das mit dem namespace stimmt schon nur das ich es peinlicher weise klein geschrieben habe...
das klappt jetzt aber die Fehler mit dem nicht deklarierten Zeugs bleibt leider? :S

Teto
30.10.2008, 21:46
So lieber Tyc0rc!

Du hast eine menge kleiner Fehler gemacht, bei manchen Methoden(Funktionen) hast du dich verschrieben und schon deshalb fehler kassiert.

Dann als nächstes hast du einige Synthxfehler gemacht und bei Textausgaben ein plus vergessen zu setzen um die Strings und Variablen miteinander zu verbinden.

Beispiel:


Console::WriteLine("Ihr name lautet: " + name "und ist schön"); <-- funktioniert nicht

Console::WriteLine("Ihr name lautet: " + name + "und ist schön");<-- funktioniert


Als nächstes hast du 2 Variablen vom Typ Double deklariert(nummer1 u. nummer2) welchen du aber nie einen Wert zugewiesen hast.Du hast die Zahlen die eigegeben wurden nämlich in Input1 und Input2 gespeichert,was auch richtig ist weil man von der Konsole nur Strings auslesen Kann.Du musst dann bei der Berechnung die Strings natürlich in Double Konvertieren,weil du das Ergebniss ja in der variable ende speicherst und die den Typ Double hat und auch nur diesen annehmen kann.

Hier der Code wie er funktioniert:


#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
double ende;
String ^name;
String ^input1;
String ^input2;

Console::WriteLine("Bitte Namen eingeben: ");
name = Console::ReadLine();

Console::WriteLine("Hallo " + name + " bitte geben sie die erste Zahl ein: ");

input1 = Console::ReadLine();

Console::WriteLine(name + ", Ihre erste zahl lautet " + input1);
Console::WriteLine(name + ", bitte geben sie die zweite zahl ein: ");

input2 = Console::ReadLine();

ende = Convert::ToDouble(input1) + Convert::ToDouble(input2);

Console::WriteLine(name + ", Ihre erste zahl lautete " + input1 + " und ihre zweite zahl lautet " + input2);
Console::WriteLine("Daraus ergeibt sich: " + ende);
Console::ReadLine();

return 0;
}

Tyc0rc
30.10.2008, 22:25
hmm super vielen dank.
Aber ich verstehe den fehler nicht richtig den ich gemacht habe... also den mit denn + also mit den Strings die ich falsch zusammengefügt habe ist klar...

aber ich lese doch in meinem code den string "input1" ein und konvertieren den in Int64 (double) namens "nummer1"

das müsste doch klappen oder?

mfg

Teto
30.10.2008, 22:40
Int64 ist kein Double sondern Integer und kann nur Ganzzahlen aufnehmen(ohne Komma).

Du hast ausserdem oben wo du die Variablen input1,input2,name deklariert hast das "s" von String(Datentyp) klein geschrieben das muss aber groß sein.

C++ ist Case-Sensetive, das heisst es wird zwischen klein -und Großschreibung unterschieden.

Naja hier nochmal der Code wie du ihn haben wolltest,vielleicht verstehst du es dann besser.



#include "stdafx.h"

using namespace System;

int main(array<System::String ^> ^args)
{
double nummer1;
double nummer2;
double ende;
String ^name;
String ^input1;
String ^input2;

Console::WriteLine("Bitte Namen eingeben:");
name = Console::ReadLine();

Console::WriteLine("Hallo " + name + " bitte geben Sie die erste Zahl ein:");

input1 = Console::ReadLine();
nummer1 = Convert::ToDouble(input1);

Console::WriteLine(name + ", Ihre erste zahl lautet " + nummer1);
Console::WriteLine(name + ", bitte geben Sie die zweite zahl ein:");

input2 = Console::ReadLine();
nummer2 = Convert::ToDouble(input2);

ende = nummer1 + nummer2;

Console::WriteLine(name + ", Ihre ersta zahl lautete "+ nummer1 + " und ihre zweite zahl lautet " + nummer2);
Console::WriteLine("Daraus ergeibt sich: " + ende);
Console::ReadLine();

return 0;
}

Tyc0rc
30.10.2008, 22:59
ahh okay...
vielen dank für deine Bemühungen... jetzt ist alles klar...
das C++ Case-Sensetive wüsst ich eigentlich aber ich konnte mich noch nicht wirklich gut in die Syntax einarbeiteten....
doch ich denke für erste versuche nichtma übel...

Teto
30.10.2008, 23:11
Ja diese Fehler können jedem passieren,auch ich mache ab und an mal nen Synthaxfehler,das machen selbst Profis.

Ich würde dir aber empfehlen reines C++ zu lernen.Das .Net Framework ist zwar eine gute Erfindung und für nicht stark Systembelastene Applikationen eine alternative schnell zum Ziel zu kommen, doch ich habe gemerkt das dadurch C++ seine ganze Geschwindigkeit genommen wird.Wenn du nen normalen C++ Compiler hast, mache ich dir dein beispiel mal in dem Code und du wirst sehen es ist schneller.

Alle die im .Net Bereich entwickeln sollen daurch nicht angegriffen werden,arbeite selber überwiegend mit C# und man kann damit sogar
Spiele,die mit der heutigen Grafik mithalten entwickeln,aber bei C++
sollte man eben nicht auf die .Net Variante zurückgreifen.

In .Net hat man zwar seine schönen StreamReader um schnell in Datein zu schreiben und alle anderen möglichen Klassen die einen viel arbeit abnehmen, aber der Aufwand in reinem C++ lohnt sich, aber nur wenn man es wirklich braucht.Man sollte sich immer merken das man zu der Sprache greift die am effektivsten und schnellsten bei guter Leistung zum Ziel führt.

.wired
30.10.2008, 23:13
Ich hätte nen Rechner (6 Funktionen) incl. Switch-Case + Auskommentiert...in C++ nur ohne .net...

Weiß ja net ob du sowas gebrauchen kannst...

Gucks dir, wenn du willst mal an....

-> http://uploaded.to/?id=x12pto (.rar ohne PW)
MD5: 4894a6d039890f8a934dbbce3a6511e9

Teto
30.10.2008, 23:58
Hier ich habe dir mal den selben Code in C++ ohne .Net geschrieben und du wirst sehen das es schneller ist.

Bei deinem jetzigen Programm brauch es nachdem kompilieren trotz eines Quad-Cores und 3 GB Ram ca. 2 Sekunden bis der Text ausgegeben wird
"Bitte geben Sie ihren namen ein:" und bei der ohne .Net ist es sofort da.

Was hier auch noch sehr schön ist man kann mit cin(console input) auch Datentypen von int und double schreiben lassen, wohingegen ich bei der .Net Variante nur den Datentyp String nehmen durfte und musste deshalb extra konvertieren.Mit cin, kann man aber leider den Datentyp string nicht nehmen,deshalb bei der Abfrage des Namens die Funktion getline().Man könnte es auch anders gestalten und einfach ein Array mit dem Datentyp char machen und cin würde wieder gehen,aber naja muss man selbst entscheiden was man macht.



#include <iostream>
#include <conio.h>
#include <string>

using namespace std;

int main(int argc, char* argv[])
{
double nummer1;
double nummer2;
double ergebniss;
string name;

cout << "Bitte geben Sie ihren Namen ein: ";
getline(cin, name);
cout << "Hallo " << name << " bitte geben Sie die erste Zahl ein: ";
cin >> nummer1;
cout << name << ", ihre erste Zahl lautet " << nummer1 << endl;
cout << name << ", bitte geben Sie die zweite Zahl ein: ";
cin >> nummer2;
ergebniss = nummer1 + nummer2;
cout << name << ", ihre erste Zahl lautete " << nummer1 << " und ihre zweite Zahl lautete " << nummer2 << endl;
cout << "Daraus ergibt sich: " << ergebniss;

getch();

return 0;
}

Tyc0rc
31.10.2008, 05:54
ich werd erstma mit .Net lernen da ich da grad eh das buch arbeite...
ich denke ein umstieg dürfte mir dann nichtmehr all zu schwer fallen :P

-[RiDER]-
31.10.2008, 22:04
Hi :D

das C++ Case-Sensetive wüsst ich eigentlich aber ich konnte mich noch nicht wirklich gut in die Syntax einarbeiteten....
Hier sieht man mal wieder, warum man als aller aller aller erstes ein Hello-World schreiben sollte (außer in Perl, wo es das JAPH ist): Damit man z.B. die "Case-Sensitivity" von Anfang an mit im Blut hat.

Genial, die sich das ausgedacht haben.

Viel Glück Dir.
GreetZ RiDER :D :D :D