首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux中未知类型名uint64_t和uint16_t uint8_t

Linux中未知类型名uint64_t和uint16_t uint8_t
EN

Stack Overflow用户
提问于 2019-05-22 10:29:58
回答 2查看 13.8K关注 0票数 8

我正在尝试在Ubuntu环境下编译一个程序,但是我遇到了一些错误,比如unknown type name 'uint64_t'unknown type name 'uint16_t',尽管我已经包含了cstdint和我相信的任何其他要求。看起来像是C++库支持的问题。

有人知道怎么解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2019-05-22 11:12:58

如果看不到你的代码,就很难回答。我猜代码没有包含cstdintstdint.h,和/或它没有使用std::uint64_t语法。

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

使用以下命令进行编译:

代码语言:javascript
复制
g++ -Wall -g --std=c++11 int64_test.cpp -o int64_test -lstdc++

代码"int64_test.cpp":

代码语言:javascript
复制
#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版本(因为这也被标记到了问题中)

代码语言:javascript
复制
#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;
}
票数 4
EN

Stack Overflow用户

发布于 2019-05-22 12:10:16

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

如果您包含<cstdint>,则需要一个实现来在std::名称空间中声明它们,如std::uint8_t等。允许但不是必需的,也可以在没有std::前缀的情况下声明它们。

我通常使用#include <stdint.h>。然而,一种更时髦的方式可能是:

代码语言:javascript
复制
#include <cstdint>

using std::uint8_t;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56248526

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档