Программы на с ++ не работают должным образом

/* 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 <iostream>

Для того, чтобы: #include "iostream"

Или попробуйте: #include <iostream.h>

или же: #include "iostream.h"

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

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

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

2 ответа

#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 что у вас уже есть.

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

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

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

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

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

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

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