Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z wyłuskaniem z std::istream* operatora >>

Ostatnio zmodyfikowano 2015-02-18 11:33
Autor Wiadomość
Fireho
Temat założony przez niniejszego użytkownika
Problem z wyłuskaniem z std::istream* operatora >>
» 2015-02-18 10:53:28
Witam, oto cały kod:
http://wklej.to/cicJM
Oto zawartość dane.txt:
http://wklej.to/Kkmay

Mam problem z użyciem operatora >> na wskaźniku do klasy std::istream. Ważny kawałek kodu:
C/C++
void CGraf::Connect( std::istream * in, std::ostream * out = NULL ) {
    if( out ) * out << "Dodawanie nowego polaczenia\nPunkt A: ";
   
    std::string a, b;
    TDlugosc dlugosc;
   
    * in >> a; // działa doskonale
    if( out ) out->operator <<( "Punkt B: " );
   
    in->operator >>( b ); // błąd
    if( out ) out->operator <<( "Dlugosc: " );
   
    in->operator >>( dlugosc ); // działa
    if( out ) out->operator <<( "\n" );
   
    Connect( a, b, dlugosc );
}

Błąd:
error: no matching function for call to 'std::basic_istream<char>::operator>>(std::string&)'|
Potem są uwagi o możliwych wersjach funkcji które chciałem użyć.

Ale dlaczego? Czym różni się dereferencja i użycie samego >>, a czym wyłuskanie ze wskaźnika funkcji operator>>? I dlaczego nie działa to na std::string, ale z TDlugosc(czyt. unsigned int) wszystko chodzi idealnie?
P-126742
Monika90
» 2015-02-18 11:26:09
C/C++
in->operator >>( b );
To działa z unsigned int a nie ze string, ponieważ operator wczytujacy do unsigned int jest funkcją składową (metodą) klasy istream, natomast operator wczytujacy do stringa nie jest składową. Więc powinno być tak
C/C++
operator >>( * in, b );

Albo po prostu tak
C/C++
* in >> b;
co zadziała w obu przypadkach.
P-126743
Fireho
Temat założony przez niniejszego użytkownika
» 2015-02-18 11:33:06
Dzięki, to wszędzie porobię
* in >> b;
 aby jakaś spójność w kodzie była.
P-126744
« 1 »
  Strona 1 z 1