Wie bekomme ich ein VC++-Programm zum Laufen?
-
Hallo Leute,
ich bin C++-Anfänger und habe eine simple Frage:
Wie bekomme ich ein VC++-Programm zum Laufen?Mein Problem: Ich kopiere mir aus dem Internet kleine C++Programme, die mich interessieren, und will sie mit meiner VS Enterprise Edition 1999 ausprobieren.
Ich unterstelle dabei, daß die meisten dieser Programme korrekt funktionieren (sie entstammen z.B. dem Online-Skript eines Informatik-Professors).Mein Compiler sieht das leider anders, und ich bekomme stets dutzende von Fehlermeldungen. Z.B. in Bezug auf die Zeile:
using namespace std;
schreibt der Compiler sinngemäß:
std ist kein Namespace
Ich schreibe auch selber kleine Programme, wobei ich mir die Details aus C++-Lehrbüchern zusammensuche. Doch keines dieser Programme kann ich testen, weil mein Compiler mir dutzende von Fehlermeldungen beschert.
Klar, im Source Code verschreibt man sich vielleicht mal - aber die meisten Fehlermeldungen sind für mich nicht nachvollziehbar.
Z.B. binde ich <string.h> ein
und deklariere dann im Programm
string satz = "Die Sonne scheint."
Doch mein Compiler akzeptiert string nicht als Variablentyp - obwohl ich oben <string.h> eingebunden habe.
Kurz, ich bin sehr ratlos. Vielleicht können mir die alten Hasen unter euch ein paar Tips geben, wie ich ein Programm aus dem Internet (siehe z.B. unten) zum Laufen kriege?
Für Hilfe wäre ich sehr dankbar!
int main()
{
// This code creates a new text file and writes few lines to it.
// Creating Export.log fileCStdioFile file;
char* pFileName = "Export.log";
CFileException e;
if ( !file.Open( pFileName, CFile::modeCreate|CFile::modeWrite|CFile::typeText|CFile::shareDenyNone, &e ) )// Add content to the file
CString szLog = "mahesh fine content starts " ;
file.WriteString(szLog);
szLog += "\n";
file.WriteString(szLog);
file.Close();
return 0;
}
-
Die fehlerfrei kompilieren, fehlerfrei linken und dann starten.
Bye, TGGC (Für echte Fans)
-
Rudi Ratlos schrieb:
Mein Compiler sieht das leider anders, und ich bekomme stets dutzende von Fehlermeldungen. Z.B. in Bezug auf die Zeile:
using namespace std;
schreibt der Compiler sinngemäß:
std ist kein Namespace
Dann hast du vermutlich keine std Header eingebunden.
Rudi Ratlos schrieb:
Z.B. binde ich <string.h> ein
und deklariere dann im Programm
string satz = "Die Sonne scheint."
Doch mein Compiler akzeptiert string nicht als Variablentyp - obwohl ich oben <string.h> eingebunden habe.
Dann arbeitet dein Compiler aber vollkommen korrekt. Denn <string.h> ist ein C Header, darin wirst du also keine String Klasse finden. Den entsprechenden Header gibt es zwar auch in C++ (<cstring>), für std::string benötigst du aber <string>.
Noch zwei Tipps:
1.char* pFileName = "Export.log";
ist zwar nicht falsch, verleitet aber zu Fehlern. Da String Literale nunmal read-only sind, sollte man
const char* pFileName = "Export.log";
schreiben.
2.
Benutze das nächste mal bitte die C/C++ Code-Tags.
-
Muss de nicht
#include <iostream>
Hin, dann dürfte der nicht mehr bei
using namespace std;
meckern
PS: Benutz bitte beim nächsten mal den Button C++ beimTextformatieren(hier im Forum). Denn, sonnst kann man deinen Text ja kaum entziffern.
BSP: Dein Code mit den Tipps von groovemaster und C++Button(Code-Tags):
#include <iostream> using namespace std; int main() { // This code creates a new text file and writes few lines to it. // Creating Export.log file CStdioFile file; const char* pFileName = "Export.log"; CFileException e; if ( !file.Open( pFileName, CFile::modeCreate|CFile::modeWrite|CFile::typeText|CFile::shareDenyNone, &e ) ) // Add content to the file CString szLog = "mahesh fine content starts " ; file.WriteString(szLog); szLog += "\n"; file.WriteString(szLog); file.Close(); return 0; }
-
Hallo GrooveMaster, hallo evil Devil,
herzlichen Dank für Eure Antworten!
Hat mir ein gutes Stück weiter geholfen. Klasse!
Daß ich mein Beispiel-Programm nicht c++-formatiert habe, tut mir leid. Ich wußte nicht, daß es diese Option gibt.
Noch eine abschließende Frage:
Wenn ich solche kleinen Programme im Internet kopiere und in meinem VC++ ausprobieren will - welche Einstellung wähle ich da am besten?Ich habe immer
- Neu - Projekte - w32-Konsolenanwendung
- Eine einfache Anwendung
gewählt und habe dann in die entsprechende Quellcode-Datei meinen Code reinkopiert.
Ist dieses Vorgehen sinnvoll - oder gibt's da einen besseren Weg?Vielen Dank im Voraus!
Ciao, herzliche Grüße!
-
Entschuldigt Leute,
ich bin's nochmal. Ich will nicht meckern - aber ich habe gerade das Programm in der Version von GrooveMaster ausprobiert. Ergebnis: 24 Fehlermeldungen und 2 Warnungen des Compilers. Dort steht z.B.:
error C2871: 'std' : Existiert nicht oder ist kein Namespace error C2065: 'CStdioFile' : nichtdeklarierter Bezeichner error C2065: 'CFileException' : nichtdeklarierter Bezeichner error C2653: 'CFile' : Keine Klasse oder Namespace
Was läuft denn da schief? Ist wirklich zum Verzweifeln!
Danke im Voraus und viele Grüße!
-
Nee, ich meinte: das Programm in der Version von (D)Evil - nicht: Groovemaster.
Das Programm in der Version von (D)Evil hab' ich getestet - mit fatalem Ergebnis.
-
Ja Mann, Scheisse! Copy'n Paste geht nich immer. Musst schon verstehen, was die Zeichen da bedeuten sollen. Das ist der bessere Weg.
Bye, TGGC Deine Unterstützung wird gebraucht!
-
@Rudi Ratlos
Naja, TGGC findet zwar meistens etwas härtere Worte, im Grunde hat er aber Recht. C++ ist nicht gerade eine Sprache, mit der man mal einfach so per Copy&Paste ein Programm erstellt. Da gehört zumindest einiges an Grundwissen dazu.Rudi Ratlos schrieb:
Ich habe immer
- Neu - Projekte - w32-Konsolenanwendung
- Eine einfache Anwendung
gewählt und habe dann in die entsprechende Quellcode-Datei meinen Code reinkopiert.
main() deutet idR auf ein Konsolenprogramm hin, also sollte dies schon so richtig sein.
error C2871: 'std' : Existiert nicht oder ist kein Namespace
Also das kann ich mir überhaupt nicht erklären. Bist du dir sicher, dass du <iostream> geschrieben hast, und nicht <iostream.h>? Ansonsten hast du wohl 'ne fehlerhafte STL Implementierung. Notfalls lass das
#include <iostream> using namespace std;
erstmal weg. Da du sowieso keine STL Stream Funktionalität nutzt, bringt das auch erstmal nichts.
Für die restlichen Fehler, da fehlt wohl einfach die MFC Bindung. Du solltest auf jedenfall die Benutzung von MFC in den Projekteinstellungen aktivieren.
-
Hallo GrooveMaster,
danke für Deine Antwort und für Deine Geduld!
Zum Thema Namespace noch diese kurze Anmerkung:
Ich habe mir aus diesem Board ein kleines Programm kopiert, da wird einfach eine Textzeile über "cout" ausgegeben. Funzt wunderbar.
Aber rate mal, was im Programm-Kopf steht. Richtig:#include <iostream> using namespace std;
Hier hat sogar mein Compiler keine Einwände - aber bei dem Programm oben ... Naja ...
TGGC hat nicht recht, auch "im Grunde" nicht. Wenn ich hier Admin wäre, würd' ich seinen Account sofort löschen. Solche RTFM-members gehören ausgelöscht.
Wie auch immer, herzlichen Dank an Dich und an (D)Evil für Eure Hilfe! Mir hat das sehr geholfen, ich find' das prima!
Ciao und weiterhin alles Gute für Euch!