2

我的任务是设置一个 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 年以来,标准的这一方面是否发生了变化?或者这段代码一开始就没有功能(我非常怀疑这一点,因为有关于它的论文)?

最后,我该如何解决这个问题?转换schar *C 风格似乎可以消除错误,但我不确定它是否能解决问题。

4

1 回答 1

0

read函数需要一个指向字符类型(即char*在您的情况下)作为第一个参数的指针。您需要使用reinterpret_cast正确投射指针。

is.read(reinterpret_cast<char*>(s), sizeof(*s))
于 2013-08-06T11:25:07.237 回答