2014-04-20 3 views
0

Я должен переписать fucntion p1() как p2(), чтобы имитировать p1() точно, используя только <iomanip> и я продолжаю получать ошибки, состояниеФорматирование с использованием <iomanip> с использованием C++ в кровопролитию

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

The код здесь:

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; 
} 
+1

Что ваш вопрос? – yizzlez

+0

мой вопрос: почему я получаю ошибки, которые указывают «недопустимые операнды типов long long unsigned int» в p2() – user2101463

+0

'<<" =% d ",' как вы думаете, что это должно делать? Просто ударьте эти части! –

ответ

2

Заявление

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

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

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

Примечание запятая там - это действует как comma operator, отбрасывая его левый аргумент и верный правый. Вы получаете в основном:

sizeof(int) << endl; 

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

Вам нужно

cout << setw(10) << "size of int = " << sizeof(int) << endl; 
+0

Хорошее редактирование. Это проще на глазах. :) – 0x499602D2

+0

@ 0x499602D2 Да :) Примечание к OP: лишние символы пробела, которые я добавил, являются необязательными, но очень полезны для чтения кода. – jrok