Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Zufalsdatei öffnen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ] [ 5 ]
010
24.03.2005, 17:40 Uhr
Pablo
Supertux
(Operator)


@wissender: ist es wirklich Notwendig, die globalen Variablen auch in einem Namespace zu packen, vor allem, wenn der Namespace namelos ist?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
24.03.2005, 19:10 Uhr
0xdeadbeef
Gott
(Operator)


@(un)wissender: Ui, du hast sogar recht. Ich war irgendwie der Ansicht, dass

C++:
namespace { int const foo = 2; }


dann, wenn es in zwei verschiedenen Modulen auftaucht, nen Linkerfehler produzieren müsste, weils implizit extern wäre...

Scheinbar muss ich den Standard doch noch mal etwas genauer lesen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
24.03.2005, 19:19 Uhr
~JackieChan
Gast


CDokumente und Einstellungen\Kamal\Desktop\Text1.cpp(14) : error C2039: 'srand' : Ist kein Element von 'std'
CDokumente und Einstellungen\Kamal\Desktop\Text1.cpp(14) : error C2039: 'time' : Ist kein Element von 'std'
CDokumente und Einstellungen\Kamal\Desktop\Text1.cpp(15) : error C2039: 'rand' : Ist kein Element von 'std'
CDokumente und Einstellungen\Kamal\Desktop\Text1.cpp(17) : error C2664: 'void __thiscall std::basic_ifstream<char,struct std::char_traits<char> >::open(const char *,int)' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct st
d::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
CDokumente und Einstellungen\Kamal\Desktop\Text1.cpp(21) : error C2039: 'cout' : Ist kein Element von 'std'
CDokumente und Einstellungen\Kamal\Desktop\Text1.cpp(21) : error C2065: 'cout' : nichtdeklarierter Bezeichner
CDokumente und Einstellungen\Kamal\Desktop\Text1.cpp(21) : error C2228: Der linke Teil von '.put' muss eine Klasse/Struktur/Union sein
CDokumente und Einstellungen\Kamal\Desktop\Text1.cpp(22) : warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
Fehler beim Ausführen von cl.exe.

Text1.exe - 7 Fehler, 1 Warnung(en)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
24.03.2005, 19:27 Uhr
0xdeadbeef
Gott
(Operator)


...whoa.

Das sieht verdammt nach MSVC6 aus.

Also gut. Mein erster Tipp wäre: Leg dir nen Compiler zu, der auch C++ kann, zum Beispiel Codeblocks mit MinGW oder Bloodshed Dev-C++. Codeblocks ist für meinen Geschmack ne bessere IDE als Dev-C++, aber auch schwieriger zu installieren, weil der Compiler nicht gleich mitgeliefert wird. Musst du wissen.

Wenns unbedingt mit dem MSVC sein muss (wovon ich dir ernsthaft abrate), man kann drum workarounden, in dem man

C++:
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

using namespace std;

static int const maximum = 100;

int main() {
  stringstream sstr;
  string dateiname;
  ifstream in;

  srand(time(0)); // Zufallszahlengenerator initialisieren
  sstr << (rand() % maximum + 1) << ".txt"; // rand() % maximum + 1 erstellt ne Zufallszahl zwischen 1 und maximum
  dateiname = sstr.str();
  in.open(dateiname, ios::in);

  // ... und dann mit der Datei arbeiten. Zum Beispiel:
  char c;
  while(in.get(c)) cout.put(c);
}


schreibt. Das ist dann immer noch standardkonform, obwohl ich diese using-direktiven eigentlich verabscheue.

Übrigens, @typecast: der Konstruktor von ifstream nimmt nen std::string nicht allein an, aber in Verbindung mit einem std::ios::fmtflag, so wie ichs geschrieben habe, geht das wunderbar.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 24.03.2005 um 19:28 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
24.03.2005, 19:42 Uhr
(un)wissender
Niveauwart


@Pablo
Hm, notwendig nicht. Die ganzen namespaces sind nicht notwendig. Aber der anonyme namespace (namelos) zeigt an (wie static bei c), dass die deklarierte Variable nur in dieser Datei gültig ist. Je weiter man den Gültigkeitbereich einer Variable einschränken kann, desto besser. Darum ist der Präprozessor auch so böse, da hier alles global ist und Namenskonflikte vorprogrammiert sind.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 24.03.2005 um 19:42 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
24.03.2005, 19:42 Uhr
~JackieChan
Gast


Er hat immer noch was, aber ich downloade mir gerade die Compiler( und danke nochmal):

Text1.cpp
cdokumente und einstellungen\kamal\desktop\text1.cpp(20) : error C2664: 'void __thiscall std::basic_ifstream<char,struct std::char_traits<char> >::open(const char *,int)' : Konvertierung des Parameters 1 von 'class std::basic_string<char,struct st
d::char_traits<char>,class std::allocator<char> >' in 'const char *' nicht moeglich
Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
cdokumente und einstellungen\kamal\desktop\text1.cpp(25) : warning C4508: 'main' : Funktion sollte einen Wert zurueckgeben; Ergebnistyp 'void' angenommen
Fehler beim Ausführen von cl.exe.

Text1.exe - 1 Fehler, 1 Warnung(en)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
24.03.2005, 19:46 Uhr
(un)wissender
Niveauwart


@beefy
Soweit ich weiß, entspricht die Übergabe eines std::string an std::ifstream::open nicht dem Standard. Nur const char * sollte da portabel sein. Viele Libs implementieren das aber auch mit std::string.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
24.03.2005, 19:49 Uhr
typecast
aka loddab
(Operator)


@beefy: Also mein g++ mekert.....

@JackieChan:

1.) Mach mal aus "in.open(dateiname, ios::in);"
ein "in.open(dateiname.c_str(), ios::in);"

2.) Fuege ein "return 0;" am ende der main-funktion ein.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
24.03.2005, 19:51 Uhr
(un)wissender
Niveauwart


@JackieChan

Das hier sollte dein Compiler aber auf jeden Fall können...

C++:
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

namespace { int const maximum = 100; }

int main() {
  using namespace std;
  stringstream sstr;
  string dateiname;
  ifstream in;

  srand(time(0)); // Zufallszahlengenerator initialisieren
  sstr << (rand() % maximum + 1) << ".txt"; // rand() % maximum + 1 erstellt ne Zufallszahl zwischen 1 und maximum
  dateiname = sstr.str();
  in.open(dateiname.c_str(), ios::in);

  // ... und dann mit der Datei arbeiten. Zum Beispiel:
  char c;
  while(in.get(c)) cout.put(c);
}


.. wenn nicht, halt dich an 0xdeadbeefs Rat und hol dir einen neuen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
24.03.2005, 20:03 Uhr
0xdeadbeef
Gott
(Operator)


Echt? Krass. Ich hätte schwören können, dass...

Naja. Zeigt, dass auch Gott vielleicht öfter mal nachschlagen sollte, bevor er auf "Abschicken" klickt...
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ] [ 4 ] [ 5 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: