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 defined
    

    und 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


  • Mod

    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.


Anmelden zum Antworten