Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
zahlhans
- Beiträge: 56
- Registriert: 06.02.2009 13:09:08
Beitrag
von zahlhans » 27.02.2009 20:43:24
Hi,
ich wollte seit längerem mal wieder ein c++ Programm schreiben. Leider ging die Kompilierung komplett in die Hose. Daher habe ich zum Test mal folgendes gemacht:
Code: Alles auswählen
#include <iostream>
using namespace std;
int main(void)
{
cout << "Hallo";
return 0;
}
Selbst das liefert beim Kompilieren mit g++ massig Fehlermeldungen:
Code: Alles auswählen
.....
ction 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::unget()':
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:703: error: '_M_gcount' was not declared in this scope
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc: In function 'std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT2*)':
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:898: error: 'streamsize' was not declared in this scope
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:898: error: expected `;' before '__extracted'
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:906: error: expected `;' before '__num'
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:907: error: '__num' was not declared in this scope
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:908: error: 'streamsize' cannot appear in a constant-expression
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:908: error: template argument 1 is invalid
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:916: error: '__extracted' was not declared in this scope
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:916: error: '__num' was not declared in this scope
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc:941: error: '__extracted' was not declared in this scope
Problem das #include <iostream>.
Kann mir jemand sagen, wie ich das in den Griff bekomme?
-
armin
- Beiträge: 2682
- Registriert: 17.03.2005 11:49:14
Beitrag
von armin » 27.02.2009 21:16:04
Wie kompilierst du das Ganze denn?
Ich sehe keinene Fehler. Zur Sicherheit habe ich es auch gerade nochmal probiert und konnte keine Probleme feststellen.
Zuletzt geändert von
armin am 27.02.2009 22:10:58, insgesamt 1-mal geändert.
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams
-
catdog2
- Beiträge: 5352
- Registriert: 24.06.2006 16:50:03
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von catdog2 » 27.02.2009 21:19:42
Hatte auch keine probleme damit.
Unix is user-friendly; it's just picky about who its friends are.
-
Danielx
- Beiträge: 6419
- Registriert: 14.08.2003 17:52:23
Beitrag
von Danielx » 27.02.2009 21:20:34
catdog2 hat geschrieben:Hatte auch keine probleme damit.
+1
-
zahlhans
- Beiträge: 56
- Registriert: 06.02.2009 13:09:08
Beitrag
von zahlhans » 27.02.2009 21:25:02
Ich kompiliere das mit "g++ dateiname.cpp", was mir ja eine "a.out" liefern sollte...
(Wenn die die iostream nicht includiere und entsprechend das cout weglasse kann das Programm zwar nicht viel, wird aber kompiliert)
-
GoKi
- Beiträge: 2068
- Registriert: 04.07.2003 23:08:56
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von GoKi » 27.02.2009 21:32:52
Code: Alles auswählen
/home/usr/bin/../lib/gcc/../../include/c++/4.3/bits/istream.tcc
Der Pfad sieht auch irgendwie komisch aus, hast du evtl ein weiteres g++ im Pfad?
MfG GoKi
:wq
-
Danielx
- Beiträge: 6419
- Registriert: 14.08.2003 17:52:23
Beitrag
von Danielx » 27.02.2009 21:33:04
Kannst du mir sagen, was es mit /home/usr/bin/ auf sich hat?
-
zahlhans
- Beiträge: 56
- Registriert: 06.02.2009 13:09:08
Beitrag
von zahlhans » 27.02.2009 22:03:01
Ich hatte vor langer Zeit mal Speicherplatzprobleme, weil ich mich in der Größe der Partionen beim Einrichten verschätzt hatte. Damals hatte ich nach irgendeinem Tutorial einiges verschoben.
Nebenbei: Software aus Quelltexten kann ich problemlos kompilieren...
-
crane
- Beiträge: 145
- Registriert: 03.01.2006 15:43:18
- Wohnort: Marburg
-
Kontaktdaten:
Beitrag
von crane » 28.02.2009 02:45:56
Das Problem habe ich aktuell unter lenny auch.
Hab g++ mittels aptitude installiert.
Kann mir nicht erklären, wo der Fehler liegen könnte.
-
habakug
- Moderator
- Beiträge: 4314
- Registriert: 23.10.2004 13:08:41
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von habakug » 28.02.2009 03:09:35
Hallo!
Besser wäre es wohl so:
Code: Alles auswählen
#include <iostream>
using namespace std;
int main()
{
cout << "Hallo" << endl;
return 0;
}
Benutzt du g++ Version 4,3, ruft >das< eine Menge Fehler hervor:
Code: Alles auswählen
#include <iostream.h>
using namespace std;
int main()
{
cout << "Hallo" << endl;
return 0;
}
Etwa so:
Code: Alles auswählen
lenny64:~# g++ -o hello debf.cpp
debf.cpp:1:22: error: iostream.h: Datei oder Verzeichnis nicht gefunden
debf.cpp: In function ‘int main()’:
debf.cpp:7: error: ‘cout’ was not declared in this scope
debf.cpp:7: error: ‘endl’ was not declared in this scope
Schau doch mal nach:
Gruß, habakug
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 28.02.2009 09:19:14
Das Problem habe ich auch und kann ich so auch nachstellen.
Du musst anstelle von iostream.h iostream schreiben. Dann sollte es funktionieren.
Hier noch der Beweis:
Code: Alles auswählen
daniel@daniel-laptop:/tmp$ g++ -Wall -o test test.cpp
test.cpp:1:22: error: iostream.h: Datei oder Verzeichnis nicht gefunden
test.cpp: In function ‘int main()’:
test.cpp:4: error: ‘cout’ was not declared in this scope
test.cpp:4: error: ‘endl’ was not declared in this scope
daniel@daniel-laptop:/tmp$ vi test.cpp
daniel@daniel-laptop:/tmp$ g++ -Wall -o test test.cpp
daniel@daniel-laptop:/tmp$ cd /tmp/
daniel@daniel-laptop:/tmp$ ./test
Hallo
daniel@daniel-laptop:/tmp$ cat test.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hallo" << endl;
return 0;
}
Oh, yeah!
-
Milbret
- Beiträge: 827
- Registriert: 26.05.2008 12:04:54
- Lizenz eigener Beiträge: GNU Free Documentation License
- Wohnort: Nörten-Hardenberg
-
Kontaktdaten:
Beitrag
von Milbret » 28.02.2009 09:52:11
Das Problem ist nicht sein Quelltext.
Es ist eher ein Problem mit den includes von g++ oder direkt von g++.
Den sein Code ist sauber und die Fehlermeldungen verweisen auch nicht auf seine Quelltext datei sondern auf die iostream.tcc die sich im include Ordner von g++ befinden.
Ich würde mal vorschlagen ein dpkg-reconfigure g++ zu machen.
Ob es dann geht ist eine andere Sache
Ansonsten kann es auch sein, dass die mit deinen Partitionen oder nur bei deiner $PATH was drin hast was nicht reingehört.
Martin
-
zahlhans
- Beiträge: 56
- Registriert: 06.02.2009 13:09:08
Beitrag
von zahlhans » 28.02.2009 10:56:44
Ja genau. Bei mir ist das ganze /usr ein symlink nach /home/usr.
Das wäre dann also das folgende:
Kann ich das im laufenden Betrieb machen oder muß ich von CD oder so booten? Und wie bekomme ich den symlink wieder hin, falls es schiefgeht? Das Notebook nutze ich nämlich für meine Arbeiten - wäre unschön, falls das nicht mehr funktioniert.
-
habakug
- Moderator
- Beiträge: 4314
- Registriert: 23.10.2004 13:08:41
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von habakug » 28.02.2009 11:08:01
Hallo!
Es ist nicht Version 4.3 mit der da gearbeitet wird. Das liest sich so:
gcc.gnu.org hat geschrieben:For future reference, available headers are listed here.
An example.
#include <iostream.h>
int main()
{
cout << "I'm too old" << endl;
return 0;
}
Compiling with previous compilers gives:
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.
But now says:
error: iostream.h: No such file or directory
In function 'int main()':
6: error: 'cout' was not declared in this scope
6: error: 'endl' was not declared in this scope
Fixing this is easy, as demonstrated below.
#include <iostream>
using namespace std;
int main()
{
cout << "I work again" << endl;
return 0;
}
Gruß, habakug
http://gcc.gnu.org/gcc-4.3/porting_to.html
-
Danielx
- Beiträge: 6419
- Registriert: 14.08.2003 17:52:23
Beitrag
von Danielx » 28.02.2009 15:27:55
@habakug:
Er verwendet doch aber iostream und
nicht das bei gcc-4.3 nicht mehr erlaubte iostream
.h
Und oben im Link steht ja include/c++/
4.3.
@zahlhans:
Kannst du dennoch mal die Ausgabe des folgenden Befehls posten:
Gruß,
Daniel
-
zahlhans
- Beiträge: 56
- Registriert: 06.02.2009 13:09:08
Beitrag
von zahlhans » 28.02.2009 17:04:15
Sorry, hatte vergessen die Ausgabe zu posten:
-
Danielx
- Beiträge: 6419
- Registriert: 14.08.2003 17:52:23
Beitrag
von Danielx » 28.02.2009 18:03:05
Wahrscheinlich hat das Verschieben des Verzeichnisses etwas mit dem Problem zu tun.
Gruß,
Daniel
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 28.02.2009 19:09:36
Habe bei mir unter lenny die gleiche Version von g++ und auch das gleiche "Problem".
Wobei ich es nicht als Problem ansehe, sondern es so löse wie es auch Habakug gepostet hat.
Oh, yeah!
-
Danielx
- Beiträge: 6419
- Registriert: 14.08.2003 17:52:23
Beitrag
von Danielx » 28.02.2009 19:27:18
@
Duff:
Duff hat geschrieben:Habe bei mir unter lenny die gleiche Version von g++ und auch das gleiche "Problem".
Es geht nicht um die veränderte Version (also mit iostream.h) von hapakug, sondern um die Version von zahlhans!
Bist du dir
100%-ig sicher, dass du unter Lenny mit g++ Version 4.3
dieses Programm von zahlhans nicht kompilieren kannst:
Code: Alles auswählen
#include <iostream>
using namespace std;
int main(void)
{
cout << "Hallo";
return 0;
}
Gruß,
Daniel
-
Duff
- Beiträge: 6321
- Registriert: 22.03.2005 14:36:03
- Wohnort: /home/duff
Beitrag
von Duff » 01.03.2009 12:04:02
Doch, mit #include <iostream> funktioniert es. Mit #include <iostream.h> nicht.
Dann habe ich wohl den Thread falsch verstanden.
Oh, yeah!
-
Danielx
- Beiträge: 6419
- Registriert: 14.08.2003 17:52:23
Beitrag
von Danielx » 01.03.2009 14:15:43
Duff hat geschrieben:Dann habe ich wohl den Thread falsch verstanden.
Na, dann bin ich aber beruhigt!
Ich habe nämlich das Programm von zahlhans auf 5 Lenny-Systemen mit g++ kompiliert, sowohl auf Systemen, die von Etch auf Lenny aktualisiert wurden und Lenny-Neuinstallationen und konnte das Problem auf keinem System reproduzieren.
Gruß,
Daniel