我的任务是设置一个 Debian 服务器,该服务器将使用TTK(触发工具包)提供服务。
但是,该软件似乎是 1997 年的,没有维护,g++
默认情况下不会使用 GCC ( ) 编译 (v4.7.2)。
一些错误源于未指定std
命名空间,我已经修复了这些错误。
但是,我遇到了一个似乎包含在软件中以实现硬件兼容性的类,特别是它的read
功能。
据我所知,该类应该抽象硬件的字节顺序(或类似性质的东西):
public:
Architecture()
{
short y = 256;
short *x=&y;
alpha_byte_ordering = ( *( (char*) (x) + 1) ) == 1 ? 1 : 0;
if (alpha_byte_ordering)
fprintf(stderr, "Architecture: detected alpha byte ordering.\n");
else fprintf(stderr, "Architecture: detected non-alpha byte ordering.\n");
}
int read(istream &is, short *s)
{
if (!is.read(s, sizeof(short))) return 0;
if (!alpha_byte_ordering) reverse_byte_order(s);
return 1;
}
还有许多其他重载read
函数,它们都吐出错误,例如:
Architecture.H: In member function ‘int Architecture::read(std::istream&, short int*)’:
Architecture.H:31:34: error: no matching function for call to ‘std::basic_istream<char>::read(short int*&, long unsigned int)’
似乎这段代码对我认为istream::read
应该接受字符数组 ( char *
) 的 C++ 标准一无所知,而不是像short *
和这样的不同类型(我实际上是在这里double *
读到的,而不是在标准中)。
我是否错误地解释了这段代码?自 1997 年以来,标准的这一方面是否发生了变化?或者这段代码一开始就没有功能(我非常怀疑这一点,因为有关于它的论文)?
最后,我该如何解决这个问题?转换s
为char *
C 风格似乎可以消除错误,但我不确定它是否能解决问题。