我正在尝试在Ubuntu环境中编译程序,但是即使我包含了unknown type name 'uint64_t'
和我认为的任何其他要求,也遇到了一些错误,提示unknown type name 'uint16_t'
,cstdint
。似乎是C ++库支持问题。
有人知道如何解决此问题吗?
答案 0 :(得分:1)
没有看到您的代码,很难回答。我猜测代码不包含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;
}
答案 1 :(得分:0)
如果包含<stdint.h>
,则应在全局名称空间中声明名称。
如果包含<cstdint>
,则要求实现在std::
命名空间中将它们声明为std::uint8_t
等。允许(但不是必需)也声明它们而无需std::
前缀。
我通常#include <stdint.h>
。但是,更时尚的方法可能是:
#include <cstdint>
using std::uint8_t;