Форматирование с помощью ‹iomanip› с использованием C++ в Bloodshed

Мне нужно переписать функцию p1() как p2(), чтобы точно имитировать p1(), используя только <iomanip>, и я продолжаю получать ошибки этого состояния.

недопустимые операнды типов long long unsigned int и "неразрешенный тип функции" в двоичный operator<<

Код здесь:

void p1()
{
    printf("Size of different basic C++ data type in number of bytes\n\n") ;
    printf("size of int           = %d \n", sizeof (int) ) ;
    printf("size of long          = %d \n", sizeof (long) ) ;
    printf("size of short         = %d \n", sizeof (short) ) ;
    printf("size of unsigned int  = %d \n", sizeof (unsigned int) ) ;
    printf("size of char          = %d \n", sizeof (char) ) ;
    printf("size of wchar_t       = %d \n", sizeof (wchar_t) ) ;
    printf("size of bool          = %d \n", sizeof (bool) ) ;
    printf("size of float         = %d \n", sizeof (float) ) ;
    printf("size of double        = %d \n", sizeof (double) ) ;
    printf("size of long double   = %d \n", sizeof (long double) ) ;
    printf("size of int ptr       = %d \n", sizeof (int *) ) ;
    printf("size of double ptr    = %d \n", sizeof (double *) ) ;
    printf("size of char ptr      = %d \n", sizeof (char *) ) ;
    printf("====================================\n\n") ;
}

Вот p2(), где я должен использовать <iomanip>:

void p2()
{
    cout<<"Size of different basic C++ data type in number of bytes\n\n";  
    cout<<setw(10)<<"size of int"<<"= %d" ,sizeof (int)<<endl;
    cout<<setw(10)<<"size of long"<<"= %d" ,sizeof (long)<<endl;
    cout<<setw(10)<<"size of short"<<"= %d", sizeof (short)<<endl ;
    cout<<setw(10)<<"size of unsigned int"<<"= %d", sizeof (unsigned int)<<endl;
    cout<<setw(10)<<"size of char"<<"= %d", sizeof (char)<<endl;
    cout<<setw(10)<<"size of wchar_t"<<"= %d", sizeof (wchar_t)<<endl;
    cout<<setw(10)<<"size of bool"<<"= %d", sizeof (bool)<<endl;
    cout<<setw(10)<<"size of float"<<"= %d", sizeof (float)<<endl;
    cout<<setw(10)<<"size of double"<<"= %d", sizeof (double)<<endl;
    cout<<setw(10)<<"size of long double"<<"= %d", sizeof (long double)<<endl;
    cout<<setw(10)<<"size of int ptr"<<"= %d", sizeof (int *)<<endl;
    cout<<setw(10)<<"size of double ptr"<<"= %d", sizeof (double *)<<endl;
    cout<<setw(10)<<"size of char ptr"<<"= %d", sizeof (char *)<<endl;
    cout<<setfill('=')<<setw(40)<<"="<<endl;
}

person user2101463    schedule 20.04.2014    source источник
comment
Какой у Вас вопрос?   -  person yizzlez    schedule 20.04.2014
comment
мой вопрос: почему я получаю ошибки, указывающие на недопустимые операнды типов «long long unsigned int» в p2()   -  person user2101463    schedule 20.04.2014
comment
<<"= %d", как вы думаете, что это должно делать? Просто пните эти части!   -  person πάντα ῥεῖ    schedule 20.04.2014


Ответы (1)


Заявление

cout<<setw(10)<<"size of int"<<"= %d" ,sizeof (int)<<endl;

эквивалентно

( (cout<<setw(10)<<"size of int"<<"= %d") , sizeof (int) ) << endl;

Обратите внимание на запятую — она действует как оператор запятой, отбрасывая левый аргумент и возвращая правый. один. Что вы получаете в основном:

sizeof(int) << endl;

что явно не соответствует действительности. Кроме того, << "= %d" просто дословно вставит строку в поток, ничего больше. Спецификаторы формата здесь не имеют значения. При потоковой передаче с использованием operator<< разрешение перегрузки автоматически выбирает правильную перегрузку, поэтому передаваемое значение имеет правильный формат.

Тебе нужно

cout << setw(10) << "size of int = " << sizeof(int) << endl;
person jrok    schedule 20.04.2014
comment
@ 0x499602D2 Да :) Примечание к OP: дополнительные пробельные символы, которые я добавил, являются необязательными, но значительно улучшают читаемость кода. - person jrok; 20.04.2014