Solaris 上的 GCC - 在"0x00000002"之前解析错误
GCC on Solaris - parse error before `0x00000002'
我正在开发一个C++项目,该项目在几个平台上编译,包括Windows、Linux和Solaris。
Solaris版本的代码相当旧。我正在用几年来所做的更改来更新它,在Windows和Linux上编译良好的代码会出现奇怪的编译器错误。
GCC的版本是2.95.3,在Solaris 9(SunOS 5.9)上。我知道这些都是非常旧的版本
奇怪的错误是"parseerrorbefore",后面跟着一个没有出现在源文件中的十六进制数字。
以下是一个源文件的错误小样本(并非全部)
/InDB/InDB/Column.cpp:在方法`bool InDB::IndexSorter::operator()(unsigned int,unsigned整型)'中:./InDB/InDB/Column.cpp:27:在"0x00000002"之前解析错误./InDB/InDB/Column.cpp:In方法`int InDB::Column::load()':./InDB/InDB/Column.cpp:110:在"0x00000020"之前解析错误./InDB/InDB/Column.cpp:111:初始化非常量引用类型"int&"./InDB/InDB/Column.cpp:111:来自"int"类型的右值
以下是Column.cpp中包含第27行的函数:
bool IndexSorter::operator()(unsigned int _Lhs, unsigned int _Rhs) {
// Get the two records
unsigned int _L = Cp->getLookupIndexAt(_Lhs); // Line 27
unsigned int _R = Cp->getLookupIndexAt(_Rhs);
// Now do the comparison
return (_L < _R);
}
这个函数在旧的工作版本的Solaris代码和当前版本之间没有任何变化,但在同一个源文件中还有其他几个变化。
错误消息中的十六进制数字是什么意思
我该怎么解决这个问题?
usr/include/iso/ctype_iso.h
定义了_L
:
#define _U 0x00000001 /* Upper case */
#define _L 0x00000002 /* Lower case */
#define _N 0x00000004 /* Numeral (digit) */
#define _S 0x00000008 /* Spacing character */
#define _P 0x00000010 /* Punctuation */
#define _C 0x00000020 /* Control character */
#define _B 0x00000040 /* Blank */
#define _X 0x00000080 /* heXadecimal digit */
这破坏了你的代码。这些定义是特定于Solaris的,不过正如@juancopanza所指出的,您不应该首先使用这些类型的标识符。
最好的办法是简单地将这些标识符重命名为更合法的标识符(简单地说,Lhs
、Rhs
和L
、R
应该有效,因为它们是局部变量)。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- Solaris 上的 GCC - 在"0x00000002"之前解析错误