Scite Fehlermeldung: Kann die Datei nicht finden

  • Themenstarter Themenstarter Rena-chan
  • Beginndatum Beginndatum
R

Rena-chan

Hallo zusammen, ich bin ein blutiger Anfänger, der gerne c lernen möchte. Ich habe mir daher SciTe heruntergeladen und noch KEINE Einstellungen vorgenommen, weder im System noch in den SciTe properties.

Habe folgendes testprogramm geschrieben:

<include iostream.h>

main{

cout << "Test";
getchar();

}

Wenn ich mit Strg+F7 Compilieren möchte gibt er mir folgendes aus:

>g++ -pedantic -Os -c test.cpp -o test.o
>Das System kann die angegebene Datei nicht finden.

Ich benutze Windwos XP und habe keine Ahnung was mir diese Fehlermeldung sagen will. Ich vermute es liegt irgfendwie daran, dass ich im System den Compiler in den Umgebungsvariablen angeben muss....aber wie genau soll ich das machen weil ich dachte immer SciTe bringt den Compiler schon mit....?

Ich bin um jede Art der Hilfe sehr dankbar.

Rena
 
Hi,

ich kenne diese IDE zwar nicht, aber vielleicht bringt es was, wenn du den Installationspfad von SciTe in die Umgebungsvariable aufnimmst? Kannst du mit Hilfe der Windows-Suche die g++.exe auf deinem finden?

Ansonsten lade die MinGW runter (den Automated Installer) und installier das mit den Standard-Einstellungen. Anschließend c:\mingw\bin in die Umgebungsvariable PATH aufnehmen. Ich vermute jetzt mal, du weißt, wie das geht, weil du quasi selbst schon drauf gekommen bist.
 
Also habe jetzt mal die g++ exe gesucht: gefunden hat er G++.EXE-373F4961.pf; g++ und mingw32-g++. Habe den Dateipfad der g++ in der Umgebungsvariablen dann angegeben. Jetzt bekomme ich folgenden Fehler:

>g++ -pedantic -Os -c test.cpp -o test.o
test.cpp:1: error: expected constructor, destructor, or type conversion before '<' token
test.cpp:1: error: expected `,' or `;' before '<' token
test.cpp:8:2: warning: no newline at end of file
>Exit code: 1

Der Quellcode ist gleichgeblieben. Ich vermute jetzt dass es irgendwas mit der Library zu tun hat, aber wie kann ich das kompensieren?
 
Ja, der Fehler liegt diesmal in deinem Quellcode.
C++:
#include <iostream>

using namespace std;

int main() {
    cout << "Test";
    cin.get();

    return 0;
}
So sollte es gehn.

Und als IDE solltest du lieber auf Dev-Cpp oder Eclipse umsteigen. Eclipse wirst ein erst konfigurieren müssen, daher ist Dev-Cpp sicherlich für den Anfang besser geeignet. SciTe ist mehr eine IDE für AutoIt-User (meiner Meinung nach).
 
Also, danke erstmal für die Hilfe =)

Dann folgendes: Wenn ich bei meinem oberen Code den Include Befehl rausnehme bekomme ich folgende Fehlermeldung:

>g++ -pedantic -Os -c test.cpp -o test.o
test.cpp:1: error: invalid function declaration
test.cpp:6:2: warning: no newline at end of file
>Exit code: 1

Wenn ich den von Akeshihiro vorgeschlagenen Code nutze bekomme ich auch einen Fehlercode:

>g++ -pedantic -Os -c test.cpp -o test.o
test.cpp:10:2: warning: no newline at end of file
>Exit code: 0

und ich steige nicht wirklich durch den Code durch, den du da schreibst, wozu ist : using namespace, wieso machst du aus dem main eine integer variable und was ist das in zeile 7? so eine art abkürzung für cin >> getchar (); ?

btw habe mir auch dev c++ runtergeladen. das gibt mir nun die Meldung, dass die Compilierung mit deinem Code geklappt hat. Mit meinem kommt trotzdem noch folgende Meldung:

Compiler: Default compiler
Führt g++.exe... aus
g++.exe "C:\Dokumente und Einstellungen\Administrator\Desktop\test2.cpp" -o "C:\Dokumente und Einstellungen\Administrator\Desktop\test2.exe" -I"C:\Programme\Compiler\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Programme\Compiler\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Programme\Compiler\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Programme\Compiler\Dev-Cpp\include\c++\3.4.2" -I"C:\Programme\Compiler\Dev-Cpp\include" -L"C:\Programme\Compiler\Dev-Cpp\lib"
In file included from C:/Programme/Compiler/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,
from C:\Dokumente und Einstellungen\Administrator\Desktop\test2.cpp:4:
C:/Programme/Compiler/Dev-Cpp/include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
C:\Dokumente und Einstellungen\Administrator\Desktop\test2.cpp:6: error: invalid function declaration

Ausführung beendet
 
Die Fehlermeldung, die du bekommst, wenn du meinen Code kompilierst, bedeutet nur, dass du ganz am Ende der Datei keine Leerzeile hast. Ist nicht so tragisch, solltest du aber dennoch einfügen.

So, zu deinem falschen Code. Erst einmal ist deine include-Anweisung falsch gewesen. Die Anweisung beginnt mit einer Raute (#) und in die spitzen Klammern kommt lediglich die Bibliothek, die includet werden soll.

Das "using namespace std;" muss sein, wenn du cout verwenden willst, da es sonst nicht bekannt ist. In C++ gibt es Namespaces und cout ist in dem Namespace std drin. Wenn du das "using ..." weglässt, dann müsstest du cout so benutzen müssen:
Code:
std::cout << "Test";
Man sparrt sich also die explizite Angabe der Namespaces, wenn man auf eine Klasse usw. aus einem solchen Namespace zugreifen will.

Und ich habe aus main keinesfalls eine Variable gemacht. Jede Funktion hat einen Rückgabetyp und der Rückgabetyp von main ist nunmal int. Und abgesehn davon fehlten bei dir die runden Klammern, die kennzeichnen, dass es sich um eine Funktion handelt.

Und zu guter letzt wär da noch das cin.get(). Du hast getchar() verwendet. Das kann aber so nicht funktionieren, du müsstest dafür stdio.h einbinden. Da ich das nicht gemacht habe, sondern weiterhin iostream als Bibliothek nutzen wollte, habe ich auf cin.get() zurückgegriffen, was genau das gleiche macht. Mit cin kann man Benutzereingaben auf der Kommandozeile einlesen.
 
Zuletzt bearbeitet:
Hi,

1. Bitte packe Ausgaben von Compiler-Meldungen in Code-Tags. Z.B. so:

Code:
>g++ -pedantic -Os -c test.cpp -o test.o
test.cpp:1: error: invalid function declaration
test.cpp:6:2: warning: no newline at end of file
>Exit code: 1

Dazu einfach beim Posten hier auf die Raute klicken (#), den entsprechenden Ausgabe-Text innerhalb dieser zwei Tags ([code ]text...[/ code]) packen. (Bei dem Beispiel sind Leerzeichen drin, die musst du natürlich weglassen.

2. using namespace ist eine C++-Compiler-Anweisung, den Namensraum std zu verwenden. Du kannst dann beispielsweise

C++:
using namespace std;

string foo = "bar";

notieren anstatt

C++:
std::string foo = "bar";

Das ist so, weil in C++ Klassen in Namensräume gepackt werden. std steht für Standard, also den Standard-Namensraum, in dem sich Basis-Objekte befinden.

Angenommen, es gäbe einen Namensraum "mein::eigener::Kram", in dem sich die Klasse "superklasse" befindet. Das sähe dann so aus:

C++:
namespace mein::eigener::Kram
{
  class superklasse
  {
     /* Hier Klassen-Member-Prototypen */
  }
}

Dann könntest du in deinem C++-Programm diese Klasse auf zwei Arten verwenden:

C++:
using namespace mein::eigener:Kram;

superklasse InstanzDerSuperKlasse;

bzw.

C++:
mein::eigener:Kram::superklasse InstanzDerSuperKlasse;

Es dient also lediglich der Übersichtlichkeit und der Namenskonfliktvermeidung.

3. Die Warnung sagt lediglich aus, das du keine neue Zeile am Ende der Datei gemacht hast. Wenn du eine leere Zeile hinten anfügst, sollte die Warnung verschwinden.

4. Versuche nicht, gleich am Anfang verschiedene IDEs zu verwenden. Suche dir eine aus, bei der du das Gefühl hast, sie passt gut und du kommst damit zurecht. Dann gewöhne dich daran und versuche sie komplett auszunutzen.

5. Versuche erstmal die Grundkenntnisse von C/++ in einem Buch zu lesen. Notfalls nimm das große C von A-Z-Buch als Online-Ausgabe und studiere es.
 
Also zuerst: es gibt im gast user Bereich keine Code Zeilen einfügung.

Zweitens: ich verstehe KEIN wort was ihr in den letzten 2 Posts geredet habt; in der Beruffsschule, wo wir c lernen haben wir noch nie using namespace oder diese anderen sachen benutzt, nur das was ich als meinen code deklariert habe...versteht mich cniht falsch aber ich will dass das, was ind er berufsschule klappt, auch hier bei mir zu hause klappt, und ich will mich da nich umstellen und was völlig anderes dazunehmen, ich will erstmal das "normale" verstehen und bei mir so einrichten....

und auch nach dem einfügen einer zusätzlichen Zeile mit dem vorgeschlagenen Programm isses nich wirklich behoben:

Compiler: Default compiler
Führt g++.exe... aus
g++.exe "C:\Dokumente und Einstellungen\Administrator\Desktop\test2.cpp" -o "C:\Dokumente und Einstellungen\Administrator\Desktop\test2.exe" -I"C:\Programme\Compiler\Dev-Cpp\lib\gcc\mingw32\3.4.2\include" -I"C:\Programme\Compiler\Dev-Cpp\include\c++\3.4.2\backward" -I"C:\Programme\Compiler\Dev-Cpp\include\c++\3.4.2\mingw32" -I"C:\Programme\Compiler\Dev-Cpp\include\c++\3.4.2" -I"C:\Programme\Compiler\Dev-Cpp\include" -L"C:\Programme\Compiler\Dev-Cpp\lib"
In file included from C:/Programme/Compiler/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,
from C:\Dokumente und Einstellungen\Administrator\Desktop\test2.cpp:4:
C:/Programme/Compiler/Dev-Cpp/include/c++/3.4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
C:\Dokumente und Einstellungen\Administrator\Desktop\test2.cpp:6: error: invalid function declaration

Ausführung beendet

Ka was nun ich werde in der Berufsschule fragen X_x
 
Dann sag in deiner Berufsschule mal, dass die euch das richtig beibringen sollen. Ich will dir ja nicht zu nahe treten, aber der Code, den du gepostet hattest, war falsch, das ist Fakt. Ich glaub auch nicht, dass euch das so in der Schule beigebracht wurde. Sogar wenn man bei der main-Funktion den Rückgabetyp weglässt, weil viele Compiler dann daraus automatisch int als Rückgabetyp setzen, die runden Klammern fehlten dennoch und die Präprozessor-Anweisung war genauso falsch.

Und in deiner Fehlermeldung steht, dass du auf iostream.h verzichten solltest, weil das eine als deprecated markierte Header-Datei (Bibliothek) ist. Ich weiß nicht, was die euch da versuchen beizubringen, aber ich hab das Gefühl, dass ihr C mit Pseudo-C++ lernt, weswegen ich auch gesagt hab, dass du dann in der Schule sagen sollst, dass die euch das richtig beibringen sollen, nämlich entweder reines C oder richtiges C++ mit aktuellen Standards.
 
Zuletzt bearbeitet:
Also, du kannst die Code-Tags auch manuell setzen, wie ich das beschrieben habe. Das es für Gast-Zugang sowas nicht gibt, wusste ich nicht. BTW: vielleicht solltest du dir ein Konto anlegen?

Wenn du den Code, wie du ihn in deinem ersten Post beschrieben hast, kompilieren willst, wirst du schnell merken, dass es so nicht funktioniert. Vielleicht benutzt ihr an der Berufsschule eine IDE, die gewisse Dinge automatisch macht? Visual Studio bspw. schreibt gewisse Deklarationen und Definitionen bereits bei der Projekt-Erstellung in den Code.

Faktisch ist eine Funktionsdeklaration in C/C++ nun einmal so:

Code:
<Rückgabe-Datentyp> <Funktionsname> ( <optionale Parameterliste mit Datentypen-Angabe )
{
  <Funktionskörper>
}

Eine Funktion (und in C/++ gibt es ausschließlich Funktionen, keine Prozeduren) hat immer einen Rückgabe-Typ. Es mag Compiler geben, die es einem nicht übel nehmen, wenn man den Typ weglässt. Stattdessen wird die Funktion den Typ int zurück geben.

Wenn man C++ statt "reinem" C verwendet, sollte man statt #include <iostream.h> folgendes schreiben

C++:
#include <iostream>

Wenn du nun die cout-Klasse verwenden willst, musst du entweder using namespace verwenden, oder den Namensraum angeben, in dem sich cout befindet. Das ist keine Gängelei, das ist nun mal so, und es entspricht dem C++-Standard. Wenn ihr in der Berufsschule irgendwelche exotischen Compiler verwendet, die das nicht benötigen, musst du das in deiner Frage erwähnen. Wir gehen jedenfalls erstmal davon aus, das du einen Compiler wie gcc/g++ verwendest, bei dem man sich nun mal an die Standards halten muss.


Du schreibst auch immer, das du C lernen willst. Postest aber C++-Code. Vielleicht sollte das auch erst mal geklärt werden?

Dein Code in C wäre nämlich tatsächlich ohne using namespace. Hätte dann aber auch keine cout-Klasse:

C++:
#include <stdio.h>

int main()
{
  printf( "Hallo Welt\n" );
  getchar();

  return 0;
}
Schau doch noch mal in deine Unterlagen oder frag deinen Lehrer zu diesem Thema. Vielleicht kommt dann Licht in die Sache.
 
Zuletzt bearbeitet:
Zurück