программы на c ++ не работают должным образом [закрыто]

/* 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;
}

Вывод:

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$

Кто-нибудь, пожалуйста, скажите мне, что случилось?

ACTIONPARSNIP (ANDREW-WOODHEAD666) предложил следующее:

Попробуйте изменить: #include

To: #include «iostream»

Или попробуйте: #include

или: #include «iostream.h»

И после внесения этих изменений я получил следующее .

Вот результат для той же программы выше, с «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

Кто-нибудь может помочь в этом и предложить я что не так?

1
задан 28 July 2012 в 03:08

2 ответа

Вы должны использовать: #include <iostream> (не забывайте о пробелах) и using namespace std;

Скомпилируйте его, используя следующий синтаксис: g++ -o 2 2.cpp

Если это не работает затем: find /usr/include -name iostream -type f -print и добавьте его в свой путь включения

0
ответ дан 28 July 2012 в 03:08

#include <iostream> было правильно. (На самом деле, у вас было #include<iostream>, без пробела, но это тоже правильно.) Включая вместо этого "iostream.h" или <iostream.h>, на самом деле оба неверны, хотя некоторые компиляторы и стандартные библиотеки примут их.

Эта проблема связана с тем, что стандартная библиотека не обеспечивает перегрузки operator>>, которая может принимать std::istream слева и std::ostream& справа. Проще говоря, именно здесь происходит ваша ошибка:

cin >> ch>>endl;
  • Обратите внимание, что это эквивалентно (cin >> ch) >> endl, и это >> вне скобок, где ошибка происходит, хотя изменение скобок, чтобы попытаться передать ch и endl в качестве аргументов для >>, также будет неверным.
  • endl - это ostream&, а cin - это istream. >> не может работать с istream слева и ostream& справа, так как STL не определяет никакой перегрузки, которая может быть выбрана для такого выражения.

Вы можете использовать endl с cout, но вы не можете использовать его с cin.

Как это исправить, зависит от того, что вы намеревались сделать .

  • Если ваша цель состоит в том, чтобы печатать новую строку после ввода, добавьте после этого отдельное утверждение (cout << endl) или добавьте endl к последующему утверждению с cout, которое у вас уже есть. . [+1149]

  • Если ваша цель состоит в том, чтобы прекратить принимать вводные данные при обнаружении новой строки, это уже произойдет с использованием << с cin, поэтому просто удалите часть endl: [ 1150]

    cin >> ch;
    
  • Если ваша цель состоит в том, чтобы продолжал принимать данные, когда с любым пробелом , кроме , встречается символ новой строки (то есть вы хотите сделать Обязательно прочитайте ровно одну строку ввода в массив char или std::string), вам придется использовать более сложное выражение или, возможно, даже не использовать operator>> с cin вообще.

    Поскольку неясно, чего вы хотите, и решения для этого не зависят от платформы (в то время как перегрузки доступны в реализации STL, по крайней мере, теоретически зависит от платформы), подробности о том, как сделать это выходит за рамки этого ответа. Но если это то, что вы хотите сделать, я рекомендую задать Переполнение стека .

  • [Одна тысяча сто пятьдесят четыре]
0
ответ дан 28 July 2012 в 03:08

Другие вопросы по тегам:

Похожие вопросы: