【发布时间】:2015-06-21 06:34:56
【问题描述】:
我正在开发一个在几个平台上编译的 C++ 项目,包括 Windows、Linux 和 Solaris。
代码的 Solaris 版本相当旧。我正在使用几年来所做的更改对其进行更新,并且在 Windows 和 Linux 上编译良好的代码会出现奇怪的编译器错误。
GCC 是 2.95.3 版,在 Solaris 9 (SunOS 5.9) 上。我知道这些都是非常旧的版本。
奇怪的错误是“parse error before”,后跟一个未出现在源文件中的十六进制数字。
这是一个源文件的一小部分错误(不是全部):
./InDB/InDB/Column.cpp:在方法`bool InDB::IndexSorter::operator ()(unsigned int, unsigned int)'中: ./InDB/InDB/Column.cpp:27:在“0x00000002”之前解析错误 ./InDB/InDB/Column.cpp:在方法“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 代码的旧工作版本和当前版本之间,此函数完全没有变化,但在同一个源文件中还有其他一些变化。
错误消息中的十六进制数字是什么意思?
我该如何解决这个问题?
【问题讨论】:
-
那么以
_开头的名称后跟一个大写字符被保留用于实现。我会先解决这个问题。