在Linux中出现了未知类型名称uint64_t、uint16_t、uint8_t

12
我正在尝试在Ubuntu环境下编译一个程序,但遇到错误,显示出现unknown type name 'uint64_t'unknown type name 'uint16_t',即使我已经包含了 cstdint 和其他必要的内容。看起来是C++库支持的问题。
有人知道如何解决吗?

3
请提供您的代码,其中包含 #include。 - Kingsley
4
我猜你需要使用 std::uint64_t,但没有代码我不能确定。代码是否有 using namespace std;?实际上,只需阅读这个答案:https://dev59.com/ZmYr5IYBdhLWcg3wfKL_#13643019 - Kingsley
1
请加入您的代码,并附上编译所用的命令及环境详情。 - Anirudh
1
请编辑您的问题并在其中添加代码。 - n. m.
1
请创建一个能够演示你的问题的最小可复现代码(MCVE)。 - phuclv
显示剩余2条评论
2个回答

7

没有看到你的代码,很难回答。我猜测代码中没有包含 cstdintstdint.h,并且也没有使用 std::uint64_t 语法。

我的答案只能是一个你可以运行的简单测试/示例。

使用以下命令进行编译:

g++ -Wall -g --std=c++11 int64_test.cpp -o int64_test -lstdc++

代码 "int64_test.cpp":
#include <cstdint>
#include <iostream>

int main( int argc, char **argv )
{
    std::uint64_t u64 = 3;
    std::int32_t  i32 = 141;

    std::cout << "u64 = " << u64 << std::endl;
    std::cout << "i32 = " << i32 << std::endl;

    return 0;
}

这段代码和编译在Ubuntu 18.04上运行良好,我预计它也适用于Ubuntu 14.x。为了完整起见,这里也提供了C语言版本(因为这也与问题相关)。
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>  // Must have this!

int main( int argc, char **argv )
{
    uint64_t u64 = 3;
    int32_t  i32 = 141;

    printf( "u64 = %lu\n", u64 );
    printf( "i32 = %d\n", i32 );

    return 0;
}

3

如果您包含了 <stdint.h>,则这些名称应该在全局命名空间中声明。

如果您包含了 <cstdint>,则实现将在std:: 命名空间中声明它们,例如 std::uint8_t等。也可以不带 std:: 前缀进行声明(尽管不是必需的)。 (严谨地说,一些具有奇怪字长的架构的实现可能没有 int64_t,只声明 int_least54_t int_fast64_t ,但我不知道有哪些实现会这样做。)

我通常会使用#include <stdint.h>。但是,更流行的方法可能是:

#include <cstdint>

using std::uint8_t, std::uint16_t, std::uint64_t;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接