gpt4 book ai didi

c++ - 为什么这个 C++ 代码不能编译?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:56:23 26 4
gpt4 key购买 nike

我的任务是设置一个 Debian 服务器,该服务器将使用 TTK 提供服务。 (触发工具包)。

但是,该软件似乎是 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++ 标准一无所知,我认为该标准指定 istream::read 应该接受字符数组 (char *),而不是变化诸如 short *double * 之类的类型(我实际上读到了 here ,不在标准中)。

我是否错误地解释了这段代码?自 1997 年以来,标准的这方面是否发生了变化?还是这段代码一开始就没有功能(我非常怀疑这一点,因为有关于它的论文)?

最后,我该如何解决这个问题?将 s 转换为 char * C 风格似乎消除了错误,但我不确定它是否解决了问题。

最佳答案

read函数想要一个指向字符类型的指针(即 char* 在你的例子中)作为第一个参数。您需要使用 reinterpret_cast 来正确转换指针。

喜欢

is.read(reinterpret_cast<char*>(s), sizeof(*s))

关于c++ - 为什么这个 C++ 代码不能编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18078831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com