о ostream и как использовать в основной функции - PullRequest
0 голосов
/ 11 декабря 2011

Я должен был написать функцию, которая binary_print(outstream& outs,unsigned int a) но когда я пишу тестовый файл для этой функции, он говорит об ошибке.

#include<iostream>

int main()
{ 
    unsigned int d;
    std::cout<<"Enter any positive decimal number:";
    std::cin>>d;
         std::cout<<"Binary of your number is "<<binary_print(cout,d);//<<endl;

     std::cout<<'\n';}
}

ошибка:

testfile_rec.cpp: 18: 60: ошибка: нет совпадения с оператором << в 'std :: operator << [with _Traits = std :: char_traits] (((std :: basic_ostream &) (& std :: cout)), ((const char *) "Двоичный код вашего номера")) << двоичный_принт (((std :: ostream &) (& std :: cout)), d) 'ostream: 108: 7: note: Кандидаты: std :: basic_ostream <_CharT, <em>Черты> :: _ostream_type & станд :: basic_ostream <_CharT, _Traits> :: operator << (std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type & (*) (std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type &)) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em> Черты> :: _ostream_type = std :: basic_ostream] ostream: 117: 7: примечание: std :: basic_ostream <_CharT, <em> Черты> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (std :: basic_ostream <_CharT, <em>Черты>> * _ios_type & (*) (std: : basic_ostream <_CharT, <em>Черты> :: _ios_type &)) [with _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em> Черты> :: _ostream_type = std :: basic_ostream, std :: basic_ostream <_CharT, <em>Черты> :: _ios_type = std :: basic_ios] ostream: 127: 7: примечание:
std :: basic_ostream <_CharT, <em>Черты> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (std :: ios_base & (*) (std :: ios_base &)) [with _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em> Черты> :: _ostream_type = std :: basic_ostream] ostream: 165: 7: примечание: std :: basic_ostream <_CharT, <em> Traits> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (long int) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em> Черты> :: _ostream_type = std :: basic_ostream] ostream: 169: 7: примечание: std :: basic_ostream <_CharT, <em> Traits> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (long unsigned int) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em> Черты> :: _ostream_type = std :: basic_ostream] ostream: 173: 7: примечание: std :: basic_ostream <_CharT, <em> Traits> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (bool) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em> Черты> :: _ostream_type = std :: basic_ostream] ostream.tcc: 91: 5: note: std :: basic_ostream <_CharT, _Traits> & std :: basic_ostream <_CharT, _Traits> :: operator << (short int) [с _CharT = char, _Traits = std :: char_traits] ostream: 180: 7: note: std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (короткое беззнаковое целое) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em>Черты> :: _ostream_type = std :: basic_ostream] ostream.tcc: 105: 5: примечание:
std :: basic_ostream <_CharT, _Traits> & std :: basic_ostream <_CharT, _Traits> :: operator << (int) [с _CharT = char, _Traits = std :: char_traits] ostream: 191: 7: примечание: <br> std :: basic_ostream <_CharT, <em>Черты> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (без знака int) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type = std :: basic_ostream] ostream: 200: 7: примечание:
std :: basic_ostream <_CharT, <em>Черты> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (long long int) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type = std :: basic_ostream] ostream: 204: 7: примечание:
std :: basic_ostream <_CharT, <em>Черты> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (long long unsignedint) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type = std :: basic_ostream] ostream: 209: 7: примечание:
std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (double) [с _CharT = char, _Traits = std :: char_traits, std:: basic_ostream <_CharT, <em>черты> :: _ostream_type = std :: basic_ostream] ostream: 213: 7: примечание: std :: basic_ostream <_CharT, <em>черты> :: _ostream_type & std:: basic_ostream <_CharT, _Traits> :: operator << (float) [с _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type = std ::basic_ostream] ostream: 221: 7: примечание: std :: basic_ostream <_CharT, <em>черты> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (long double) [with _CharT =char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type = std :: basic_ostream] ostream: 225: 7: примечание: std :: basic_ostream <_CharT, <em>Traits> :: _ostream_type & std :: basic_ostream <_CharT, _Traits> :: operator << (const void *) [с _CharT = char, _Traits = std :: char_traits, std ::basic_ostream <_CharT, <em>Traits> :: _ostream_type = std :: basic_ostream] ostream.tcc: 119: 5: note: std :: basic_ostream <_CharT, _Traits> & std :: basic_ostream <_CharT, _Traits>:: operator << (std :: basic_ostream <_CharT, <em>Traits> :: _streambuf_type *) [with _CharT = char, _Traits = std :: char_traits, std :: basic_ostream <_CharT, <em>Traits> :: _streambuf_type = std :: basic_streambuf]

Ответы [ 3 ]

1 голос
/ 11 декабря 2011

Вы, вероятно, не должны использовать его в потоке с вашими ostream << вызовами.

cout << "Binary of your number is ";
binary_print(cout,d);
cout << '\n';

Edit: и действительно, ошибка, которую вы опубликовали, показывает, что компилятор не может понятьчто operator<< использовать с результатом вашего вызова binary_print ().Ошибка в основном говорит: «ошибка: нет совпадения для« operator<< »в std::cout<<"Binary of your number is "<<binary_print(cout,d);, а затем перечисляет все альтернативы, которые он пытался найти.

1 голос
/ 11 декабря 2011

Если вы хотите вывести двоичное представление заданного целого числа, тогда простым способом будет использовать std::bitset как:

#include<bitset> //include this so as to use std::bitset

unsigned int input;
std::cin >> input;
std::cout << std::bitset<32>(input) << std::endl;

Это выведет 32-битное двоичное представление значения, хранящегося в input. Еще лучше написать это как:

#include <bitset>   //for std::bitset
#include <climits>  //for CHAR_BIT

std::cout << std::bitset<CHAR_BIT * sizeof(input)>(input) << std::endl;

Теперь вы можете заключить эту функцию в функцию как:

template<typename T>
void binary_print(std::ostream & out, const T & input)
{ 
   out << std::bitset<CHAR_BIT * sizeof(T)>(input) << std::endl;
}

Тестовый код:

int main() {
        int input;
        std::cin >> input;
        binary_print(std::cout, input);        //print int-representation
        binary_print(std::cout, (short)input); //print short-representation
        return 0;
}

Выход:

00000000000000000010001000010100
0010001000010100

Онлайн демо: http://ideone.com/OQU6F

1 голос
/ 11 декабря 2011

cout - это объект class ostream, представляющий стандартный поток вывода.

Ваша функция неправильно принимает параметр типа outstream. Объявление функции:

binary_p(outstream& outs,unsigned int a)

должно быть:

binary_p(std::ostream& outs,unsigned int a)
         ^^^^^^^^

Кроме того, вам необходимо сообщить вашей программе пространство имен, в котором определены cout и cin.
Do:

using std::cout;
using std::cin;

В вашем файле c ++. Я не уверен, что это единственная ошибка, потому что Вы не опубликовали фактическую ошибку в Вопросе.

...