/* 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
Кто-нибудь может помочь в этом и предложить я что не так?
Вы должны использовать: #include <iostream>
(не забывайте о пробелах) и using namespace std;
Скомпилируйте его, используя следующий синтаксис: g++ -o 2 2.cpp
Если это не работает затем: find /usr/include -name iostream -type f -print
и добавьте его в свой путь включения
#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, по крайней мере, теоретически зависит от платформы), подробности о том, как сделать это выходит за рамки этого ответа. Но если это то, что вы хотите сделать, я рекомендую задать Переполнение стека .