c ++ os programas não estão funcionando corretamente [closed]

1
/* write a prog to take the name of the user and output it with a thank you stamement*/

#include<iostream>
using namespace std;
int main()
{
 char ch[20];
 cout<<"enter your name pls"<<endl;
  cin >> ch>>endl;
  cout<<"thank you::"<<ch<<endl;
 return 0;
}

A saída é:

ff@ff-desktop:~/CCCP/ch1$ g++ 2.cpp -o 2
2.cpp: In function ‘int main()’:
2.cpp:9: error: no match for ‘operator>>’ in ‘std::operator>> [with _CharT = char, _Traits = std::char_traits<char>](((std::basic_istream<char, std::char_traits<char> >&)(& std::cin)), ((char&)(& ch))) >> std::endl’
/usr/include/c++/4.4/istream:119: note: candidates are: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>& (*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:123: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:130: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::ios_base& (*)(std::ios_base&)) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:166: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(bool&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:170: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:173: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(short unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:177: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:180: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:184: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:188: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:193: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long long int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:197: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long long unsigned int&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:202: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(float&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:206: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(double&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:210: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(long double&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:214: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(void*&) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:238: note: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_streambuf<_CharT, _Traits>*) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/istream:741: note: std::basic_istream<_CharT2, _Traits2>& std::operator>>(std::basic_istream<_CharT2, _Traits2>&, _CharT2*) [with _CharT2 = char, _Traits2 = std::char_traits<char>, _CharT = char, _Traits = std::char_traits<char>]
/usr/include/c++/4.4/bits/istream.tcc:853: note: std::basic_istream<_CharT, _Traits>& std::operator>>(std::basic_istream<_CharT, _Traits>&, _CharT&) [with _CharT = char, _Traits = std::char_traits<char>]
ff@ff-desktop:~/CCCP/ch1$

Alguém pode me dizer o que está errado?

ACTIONPARSNIP (ANDREW-WOODHEAD666) sugeriu isso:

Try changing: #include <iostream>

To: #include "iostream"

Or try: #include <iostream.h>

or: #include "iostream.h"

E depois de fazer essas alterações, recebi o seguinte.

Aqui está a saída para o mesmo programa acima, com "iostream.h" em vez de <iostream.h> :

2.cpp:2:21: error: iostream.h: No such file or directory
2.cpp: In function ‘int main()’:
2.cpp:8: error: ‘cout’ was not declared in this scope
2.cpp:8: error: ‘endl’ was not declared in this scope
2.cpp:9: error: ‘cin’ was not declared in this scope

Alguém pode me ajudar nisso e me sugerir o que está errado?

    
por faizan 28.07.2012 / 00:55

2 respostas

4

#include <iostream> estava correto. (Na verdade, você tinha #include<iostream> , sem espaço, mas isso também é correto.) Em vez disso, "iostream.h" ou <iostream.h> estão errados, embora alguns compiladores e bibliotecas padrão os aceitem.

Esse problema ocorre porque a biblioteca padrão não fornece uma sobrecarga de operator>> , que pode levar um std::istream à esquerda e std::ostream& à direita. Para ser mais claro, é aqui que seu erro está acontecendo:

cin >> ch>>endl;
  • Observe que isso equivale a (cin >> ch) >> endl e é o >> fora dos parênteses em que o erro está ocorrendo, mas alterando os parênteses para tentar passar ch e endl como argumentos para >> também estaria errado.
  • endl é ostream& e cin é istream . >> não pode operar com istream à esquerda e ostream& à direita, já que a STL não define nenhuma sobrecarga que possa ser selecionada para essa expressão.

Você pode usar endl com cout , mas não pode usá-lo assim com cin .

Como corrigir isso depende do que você pretende fazer.

  • Se sua meta for imprimir uma nova linha depois de inserir uma entrada, adicione uma instrução separada ( cout << endl ) depois disso ou adicione endl à instrução subsequente com cout que você já possui.

  • Se seu objetivo for interromper a entrada quando uma nova linha for encontrada, isso acontecerá usando << com cin , portanto, remova a parte endl completamente:

    cin >> ch;
    
  • Se o seu objetivo for manter a entrada quando qualquer espaço em branco exceto uma nova linha for encontrada (ou seja, você deve certificar-se de ler exatamente uma linha de entrada uma char array ou std::string ), você terá que usar uma expressão mais complexa, ou talvez nem mesmo use operator>> com cin .

    Como não está claro que é o que você quer, e as soluções para isso não são específicas da plataforma (considerando que sobrecargas estão disponíveis em uma implementação STL é pelo menos teoricamente específica da plataforma), detalhes sobre como fazer isso estão além do escopo desta resposta. Mas se é isso que você quer fazer, recomendo perguntar sobre o estouro de pilha .

por Eliah Kagan 28.07.2012 / 01:21
-1

Você deve usar: #include <iostream> (não se esqueça do espaço) e using namespace std;

Compile seguindo esta sintaxe: g++ -o 2 2.cpp

Se isso não funcionar, então: find /usr/include -name iostream -type f -print e adicione-o ao seu caminho de inclusão

    
por zuberuber 28.07.2012 / 01:20