错误:从 'int' 到 'std::_Ios_Openmode' 的转换无效|
error: invalid conversion from 'int' to 'std::_Ios_Openmode'|
我试图使用这个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
ios::out
不是int
而是std::_Ios_Openmode
。
这个问题已经有答案了。但是,对于正在使用日志工具的人,请执行以下操作:
在标题中更改:
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;
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 从 'int' 到 'int*' CPP 的转换无效
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 为什么我收到"从常量指针到指针的转换无效?
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 从类指针到 int 的转换无效
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- QTextStream的操作数到二进制的转换无效
- 从类型"void*"到函数指针的强制转换无效
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 模板类实例化中的指针转换无效
- 从"int"到"矢量*"的转换无效
- 从类型"void*"到类member_function指针的强制转换无效
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 另一个:从"常量类型*"到"类型*"的转换无效
- constexpr 链表 - 从 const X* 到 X* 的转换无效