Программы на с ++ не работают должным образом
/* 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 и добавьте его в свой путь включения