Linux中未知的类型名称uint64_t和uint16_t uint8_t

时间:2019-05-22 02:29:58

标签: c++ linux

我正在尝试在Ubuntu环境中编译程序,但是即使我包含了unknown type name 'uint64_t'和我认为的任何其他要求,也遇到了一些错误,提示unknown type name 'uint16_t'cstdint。似乎是C ++库支持问题。

有人知道如何解决此问题吗?

2 个答案:

答案 0 :(得分:1)

没有看到您的代码,很难回答。我猜测代码不包含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;
}

答案 1 :(得分:0)

如果包含<stdint.h>,则应在全局名称空间中声明名称。

如果包含<cstdint>,则要求实现在std::命名空间中将它们声明为std::uint8_t等。允许(但不是必需)也声明它们而无需std::前缀。

我通常#include <stdint.h>。但是,更时尚的方法可能是:

#include <cstdint>

using std::uint8_t;