我正在尝试在Ubuntu环境下编译一个程序,但是我遇到了一些错误,比如unknown type name 'uint64_t',unknown type name 'uint16_t',尽管我已经包含了cstdint和我相信的任何其他要求。看起来像是C++库支持的问题。
有人知道怎么解决这个问题吗?
发布于 2019-05-22 11:12:58
如果看不到你的代码,就很难回答。我猜代码没有包含cstdint或stdint.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;
}发布于 2019-05-22 12:10:16
如果包含<stdint.h>,则应在全局名称空间中声明名称。
如果您包含<cstdint>,则需要一个实现来在std::名称空间中声明它们,如std::uint8_t等。允许但不是必需的,也可以在没有std::前缀的情况下声明它们。
我通常使用#include <stdint.h>。然而,一种更时髦的方式可能是:
#include <cstdint>
using std::uint8_t;https://stackoverflow.com/questions/56248526
复制相似问题