我的任务是设置一个使用TTK(触发工具包)提供服务的Debian服务器。
然而,该软件似乎是从1997年开始的,并且没有维护,并且默认情况下不会使用GCC(g++
)进行编译(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)’
似乎这段代码不知道C ++标准,我认为{C}标准指定istream::read
应该接受字符数组(char *
),而不是short *
和{ {1}}(我实际上读的是here,而不是标准版。)
我是否错误地解释了这段代码?自1997年以来,这方面的标准是否有所改变?或者这段代码开始时是不起作用的(我非常怀疑这是因为有关于它的文章)?
最后,我该如何解决这个问题?将double *
转换为s
C风格似乎可以消除错误,但我不确定它是否能解决问题。
答案 0 :(得分:0)
read
函数想要一个指向字符类型的指针(例如你的char*
)作为第一个参数。您需要使用reinterpret_cast
正确地转换指针。
像
is.read(reinterpret_cast<char*>(s), sizeof(*s))