Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » datei-eingabe mit ifstream

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 ]
000
11.09.2004, 11:33 Uhr
CaesarCortezz
minderer Student


Hi Leutz,
ich stehe vor folgendem Problem:
Ich möchte mit <fstream> eine Datei einlesen die allerdings erst eingegeben werden muss.
Ich habe das ganze mit std::String versucht und kriege den Fehler


C++:
Dat.cpp(7) : error C2664: '__thiscall std::basic_ifstream<char,struct std::char_traits<char> >::std::basic_ifstream<char,struct std::char_traits<char> >(const char *,int)' : Konvertierung des Parameters
1 von 'class std::basic_string<char,struct std::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
Fehler beim Ausführen von cl.exe.



was heißt das

Ich freue mich auf antworten Thx

Caesar
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
11.09.2004, 11:39 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


zeig mal den code.

hast du ein #include <string> ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
11.09.2004, 11:39 Uhr
virtual
Sexiest Bit alive
(Operator)


Steht doch da:
Du konstruierst den ifstream mit Hilfe eines std::basic_string (oder eben std::string, das ist ein Typedef dafür) und das geht nicht, weil der Constructor einen const char* als Parameter erwartet. Gleichzeitig bietet std::string keinen operator const char* () an, so daß die implizite Konvertierung fehlschlägt.
Daher an den ersten Parameter ein ".c_str()" anhängen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
11.09.2004, 11:53 Uhr
CaesarCortezz
minderer Student


Hmm sorry wenn ich mit dem c++-leet noch nich so klarkomm aber ich weiß beim besten willen nicht was der erste parameter in dem prog sein könnte

Also ich hab mir das so gedacht (bitte nicht lachen aber verbessern )


C++:
#include <iostream>
#include <string>
#include <fstream>

int read(std::string datei) {
    std::string txt;
    std::ifstream OutFile(datei);
    while (!OutFile.eof()) {
        OutFile >> txt;
        std::cout << txt << " ";
    }
}

int main() {
    
    std::string datei;
    std::string nocheins;

    std::cout << "Wilkommen im Filereader!" << "\n";
    std::cout << "*************************" << "\n";
    std::cout << "\n";
    std::cout << "Geben Sie bitte einen Pfad mit Datei ein!" << "\n";
    std::cin >> datei;
    std::cout << "\n";
    read(datei);
    return 0;

}



für mich übrigens 2fach neu da ich mit zusätzlichen funktionen bisher nichts zu tun hatte
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
11.09.2004, 12:25 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
std::ifstream OutFile(datei);


Durch

C++:
std::ifstream OutFile(datei.c_str());


ersetzen.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
11.09.2004, 15:32 Uhr
CaesarCortezz
minderer Student


hmm ok danke für die hilfe
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
11.09.2004, 19:20 Uhr
virtual
Sexiest Bit alive
(Operator)


Naja, ich habe den Eindruck, du bist nur halb zufrieden und weißt nicht recht, mit der Fehlermeldung umzugehen:

Du musst halt genau lesen und das Unwesentliche weglassen, dann sind die Fehlermeldungen auch verdaulich:

C++:
Dat.cpp(7) : error C2664: '__thiscall std::basic_ifstream<char,struct std::char_traits<char> >::std::basic_ifstream<char,struct std::char_traits<char> >(const char *,int)' : Konvertierung des Parameters
1 von 'class std::basic_string<char,struct std::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



Sicher ist schon mal, daß der Fehler in Zeile 7 auftaucht. Dann kannst Du mal das, was in den Spitzen Klammern steht fortlassen, also die Templateargumente:

C++:
Dat.cpp(7) : error C2664: '__thiscall std::basic_ifstream<>::std::basic_ifstream<>(const char *,int)' : Konvertierung des Parameters 1 von 'class std::basic_string<>' in 'const char *' nicht moeglich
        Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden


Aus std::basic_ifstream<>::std::basic_ifstream<>(const char *,int) Kann man eben sehen, daß es ein Constructor aufruf ist, der Probleme bereitet, weil nur Konstruktoren so heißen, wie die Klasse selbst.
Dann kann man sehen, daß er den ersten Parameter nicht umwandeln kann, also datei. Er sagt Dir auch, as er gerne hätte: ein []const char*[/i]. Und er sagt auch, daß das std::basic_string keine Umwandlung in ein const char* erlaubt. Also ist Deine Aufgabe einen Weg zu finden, eine händische Umwandlung zu machen. Wie das geht, kannst Du eigentlich nur dann wissen, wenn du die Klasse std::basic_string kennst und weißt, daß sie die methode c_str() für genau diesen Zweck hat. Da string recht tentral und wichtig ist, wirst Du sie schnell kennenlernen
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
11.09.2004, 19:44 Uhr
CaesarCortezz
minderer Student


Sag mal kannst du Gedanken lesen?
auf jeden fall sind diese fehlermeldungen immer sehr verwirrend
ich schau immer welche zeile und spekulier über den fehler
Also vielen Dank für die Unterstützung und die Geduld ^^
Bis zum nächsten Problem...
Caesar
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
11.09.2004, 20:03 Uhr
(un)wissender
Niveauwart


Nun ja, diese Fehlermeldung ist eigentlich noch recht lesbar und eindeutig.
Wenn du ein bisschen mit templates experimentierst, dann bekommst du Fehlermeldungen, die über eine halbe Seite gehen und gar nichts aussagen.
Manchmal frustrierend.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
11.09.2004, 20:47 Uhr
CaesarCortezz
minderer Student


Danke für die Aufmunterung
--
Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: