2009-10-27 12 views
22

Proszę nie mylić z tytułem, jak to było już poproszony przez kogoś, ale na innym kontekściebłąd C2679: binarny ">>": nie znaleziono operatora, który bierze prawy operand typu "std :: string" (lub nie ma akceptowalnej konwersji)

poniższy kod w Visual C++ Compiler (VS2008) nie dostanie kompilację, zamiast rzuca ten wyjątek:

std::ifstream input (fileName); 

while (input) { 
    string s; 
    input >> s; 
    cout << s << endl; 
}; 

ale ten kod kompiluje grzywny w cygwin g ++ . jakieś pomysły?

+1

Proszę podać pełne źródło. – dirkgently

Odpowiedz

56

Czy uwzględniono wszystkie następujące nagłówki?

  • <fstream>
  • <istream>
  • <iostream>
  • <string>

Domyślam się, że zapomniałeś <string>.

Na marginesie: to powinno być std::cout i std::endl.

+1

Masz rację .. Brakowało mi , nie uważasz, że ten komunikat o błędzie jest całkowicie mylący. Nie mogę powiązać tego komunikatu o błędzie z poprawką, o której wspomniałeś. Bardzo dziwny!! – asyncwait

+5

@Vadi: Bardzo prawdopodobne jest, że 'std :: string' jest zdefiniowany w innym nagłówku, który już zawierasz, ale operator nie jest. Tak więc kompilator akceptuje 'string s;', ale nie wywołanie operatora strumienia. – sbi

+0

Nie musisz określać 'std :: cout'. Jeśli używasz 'using namespace std;', wystarczy tylko 'cout'. –

0

Dodawanie do @sbi odpowiedź, w moim przypadku różnica była w tym <string> zamiast <string.h> (w VS 2017).

Zobacz następującą odpowiedź: similar case answer

nadzieję, że to pomaga.

Pozdrawiam,

Facet.

Powiązane problemy