Как использовать Resetiosflags для сброса флагов Ostream? - PullRequest
0 голосов
/ 07 августа 2020

Я пробовал использовать это, но обнаружил ошибку компиляции. К сожалению, я новичок в компиляторе и не понимаю сообщения. Я пытаюсь вернуть флаги & ostream по умолчанию. Кто-нибудь знает, как правильно сбросить флаги и о чем сообщает ошибка?

#include <iostream>
#include <iomanip>
using namespace std;

int main()
{
    int v = 0xFF;
    cout << "0x" << hex << v << resetiosflags(hex) << v << endl;

    return 0;
}

Компиляция:

clang++ -Wall -std=c++11 -pedantic test251.cc && ./a.out
test251.cc:8:33: error: no matching function for call to 'resetiosflags'
    cout << "0x" << hex << v << resetiosflags(hex) << v << endl;
                                ^~~~~~~~~~~~~
/usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/iomanip:66:3: note: 
      candidate function not viable: no known conversion from
      'std::ios_base &(std::ios_base &)' to 'ios_base::fmtflags' (aka
      'std::_Ios_Fmtflags') for 1st argument
  resetiosflags(ios_base::fmtflags __mask)
  ^
1 error generated.

1 Ответ

2 голосов
/ 07 августа 2020

Ключевая часть:

candidate function not viable: no known conversion from
      'std::ios_base &(std::ios_base &)' to 'ios_base::fmtflags'

, которая сообщает вам, что resetiosflags принимает экземпляр fmtflags, но вы пытались передать ему функцию , которая возвращает ios_base. Это немного сбивает с толку, но std::hex - это манипулятор потока , который на самом деле является функцией, а std::ios_base::hex - это экземпляр std::ios_base::fmtflags, и это то, что вам нужно передать в resetiosflags.

Конкретно (не тестировалось) Думаю, это подойдет вам:

int main()
{
    int v = 0xFF;
    cout << "0x" << hex << v << resetiosflags(std::ios_base::hex)
        << v << endl;

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...