std::iwas iwas(); oder std::iwas iwas; ?
-
Als ich gerade bei Dev C++ für den code eine Fehlermeldung bekommen habe
std::ifstream blub; // incomplete type, cant be definedund ich zu
std::ifstream blub();gezwungen wurde, dachte ich es liegt an dem hohen Alter der IDE. Aber Code::Blocks verlangte dasselbe.
Das kann aber doch garnicht richtig sein? Das würde schliesslich einer Funktionsdeklaration gleichkommen?
-
Zweiteres kommt nicht nur einer Funktionsdeklaration gleich, es ist eine. Da man Funktionen bereits deklarieren kann, wenn ein Typ noch nicht vollständig bekannt ist, gehe ich mal davon aus, dass Du #include <fstream> vergessen hast?
-
Achja, wie dumm. Ich dachte mit iostream würde ich alle Arten von In und Output streams abdecken, auch die filestreams ;O
-
WhatsThis schrieb:
Achja, wie dumm. Ich dachte mit iostream würde ich alle Arten von In und Output streams abdecken, auch die filestreams ;O
iostream ist (in C++11) äquivalent zu:
#include <ios> #include <streambuf> #include <istream> #include <ostream> namespace std { extern istream cin extern ostream cout extern ostream cerr extern ostream clog extern wistream wcin extern wostream wcout extern wostream wcerr extern wostream wclog }Darf natürlich auch mehr machen, kann man sich aber nicht drauf verlassen und wird es in der Regel aber auch nicht. In C++98 ist die Definition etwas unklarer, läuft aber effektiv auf das selbe hinaus.
-
SeppJ schrieb:
WhatsThis schrieb:
Achja, wie dumm. Ich dachte mit iostream würde ich alle Arten von In und Output streams abdecken, auch die filestreams ;O
iostream ist (in C++11) äquivalent zu:
#include <ios> #include <streambuf> #include <istream> #include <ostream> namespace std { extern istream cin extern ostream cout extern ostream cerr extern ostream clog extern wistream wcin extern wostream wcout extern wostream wcerr extern wostream wclog }Darf natürlich auch mehr machen, kann man sich aber nicht drauf verlassen und wird es in der Regel aber auch nicht. In C++98 ist die Definition etwas unklarer, läuft aber effektiv auf das selbe hinaus.
Muss man in C++11 jetzt keine Semikolons mehr hinter Variablendeklarationen schreiben?

-
Oder include-guards?

Edit: BTW, So sieht es bei GCC 4.7 aus (Kommentare rausgeschnitten):
#ifndef _GLIBCXX_IOSTREAM #define _GLIBCXX_IOSTREAM 1 #pragma GCC system_header #include <bits/c++config.h> #include <ostream> #include <istream> namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION extern istream cin; /// Linked to standard input extern ostream cout; /// Linked to standard output extern ostream cerr; /// Linked to standard error (unbuffered) extern ostream clog; /// Linked to standard error (buffered) #ifdef _GLIBCXX_USE_WCHAR_T extern wistream wcin; /// Linked to standard input extern wostream wcout; /// Linked to standard output extern wostream wcerr; /// Linked to standard error (unbuffered) extern wostream wclog; /// Linked to standard error (buffered) #endif static ios_base::Init __ioinit; _GLIBCXX_END_NAMESPACE_VERSION } #endif /* _GLIBCXX_IOSTREAM */
Wo sind streambuf und ios?
-
die kommen über ostream/istream rein.