Каков спецификатор формата error_code?

Я пытаюсь использовать cpprestsdk от Microsoft. И я получал ошибку, и поэтому я хотел проверить код ошибки. Но я не могу понять спецификатор формата error_code, и я получаю это предупреждение:

предупреждение: формат '%d' ожидает аргумент типа 'int', но аргумент 3 имеет тип 'const std::error_code' [-Wformat=] printf("HTTP Exception :: %s\nCode :: %d\n" , e.what(), e.error_code());

Как распечатать код ошибки? Хотя %d работает, но я хотел знать фактический спецификатор, чтобы не получать никаких предупреждений.

PS: некоторые из них я видел здесь: https://msdn.microsoft.com/en-us/library/75w45ekt(v=vs.120).aspx , но я не думаю, что кто-то из них мне поможет.


person Nikhil Wagh    schedule 23.03.2018    source источник
comment
std::error_code – это класс. Конечно, вы не можете использовать его в старой функции C printf. По какой причине вы используете printf для начала?   -  person Some programmer dude    schedule 23.03.2018
comment
Ничего, мне просто интересно, есть ли способ сделать это таким образом.   -  person Nikhil Wagh    schedule 23.03.2018


Ответы (2)


std::error_code — это класс, и его нельзя передавать в качестве аргумента printf. Но вы можете передать значение int, возвращаемое error_code::value().

person user7860670    schedule 23.03.2018
comment
Они также могли бы использовать cout << для вывода вместо printf - person NathanOliver; 23.03.2018
comment
@NathanOliver Я знаю, что могу, но были конфликты с namespace std , поэтому я подумал о printf. - person Nikhil Wagh; 23.03.2018
comment
@NikhilWagh Не используйте using namespace std;. Просто используйте std::cout - person NathanOliver; 23.03.2018

вот один из способов:

#include <system_error>
#include <cstdio>

void emit(std::error_code ec)
{
    std::printf("error number: %d : message : %s : category : %s", ec.value(), ec.message(), ec.category().name());
}

Но давайте не будем использовать printf...

#include <system_error>
#include <iostream>

void emit(std::error_code ec)
{
    std::cout << "error number : " << ec.value()
              << " : message : " << ec.message() 
              << " : category : " << ec.category().name()
              << '\n';
}
person Richard Hodges    schedule 23.03.2018