ошибка: неверное преобразование из 'int' в 'std :: _ Ios_Openmode' | - PullRequest
0 голосов
/ 09 декабря 2011

Я пытаюсь использовать этот класс C ++ в качестве основы для взаимодействия клиента и сервера моего собственного приложения. Но выдает ошибку я не понимаю, она внутри myLog.cpp .

error: invalid conversion from 'int' to 'std::_Ios_Openmode'|

Что здесь:

void myLog::openLog(const string& fileName, int mode)
{
   if (logLevel < QUIET_MODE)
   {
      open(fileName.c_str(),mode); //Error line
      /* SNIP */

Который называется здесь:

void myLog::init()
{
   openLog("syslog.log",LOG_WRITE);
}

И LOG_WRITE определяется в заголовке так:

const int LOG_WRITE  = ios::out;

Кто-нибудь может сказать мне, почему это происходит?

Быстрая ссылка на код: myLog.cpp - myLog.h

Ответы [ 2 ]

6 голосов
/ 09 декабря 2011

ios::out не int, а std::_Ios_Openmode.

2 голосов
/ 15 июля 2014

На это уже ответили.Однако для людей, использующих рассматриваемый инструмент ведения журнала, выполните следующие действия:

В изменении заголовка:

    const int LOG_WRITE  = ios::out;
    const int LOG_APPEND = ios::app;

на

    const std::ios_base::openmode LOG_WRITE  = std::ios::out;
    const std::ios_base::openmode LOG_APPEND = std::ios::app;

Измените функции Init сint до std::ios_base::openmode, например

    ..., std::ios_base::openmode mode)

Использование int работало с OSX, но не с RHEL 5.10.После того, как я сделал вышеупомянутое изменение, он работал на RHEL 5.10.

OSX:

$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/usr/include/c++/4.2.1
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix

RHEL 5.10:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.3/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /SDK/GCC/objdir/../gcc-4.8.3/configure
Thread model: posix
gcc version 4.8.3 (GCC) 

В OSX тип определяется как

typedef unsigned int openmode;
typedef openmode     open_mode;
static const openmode app    = 0x01;
static const openmode ate    = 0x02;
static const openmode binary = 0x04;
static const openmode in     = 0x08;
static const openmode out    = 0x10;
static const openmode trunc  = 0x20;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...