如何修复错误:':: max_align_t'?

时间:2016-01-31 05:48:14

标签: c++ gcc ubuntu-15.04

我收到错误

  

" / usr / include / c ++ / 5 / cstddef:51:11:错误:':: max_align_t'尚未声明      using :: max_align_t;              ^"

所以我应该更新库,因为我找到了这个解决方案:

&#34;在库更新之前的解决方法是在该库的任何标题之前加入<cstddef><stddef.h>。&#34; 我在Ubuntu终端上写了一些命令,如:

bash $ sudo apt-get install apt-file
bash $ sudo apt-file update
bash $ apt-file search stddef.h

然后仍然存在错误。 谢谢

3 个答案:

答案 0 :(得分:4)

在发生此编译错误的.cpp文件中,您需要添加

#include <cstddef>

在任何其他标题之前,例如

main.cpp(已损坏)

#include <cstdio>

int main()
{
    using ::max_align_t;
    puts("Hello World");
    return 0;
}

尝试编译:

$ g++ -std=c++11 -o test main.cpp
main.cpp: In function ‘int main()’:
main.cpp:5:10: error: ‘::max_align_t’ has not been declared
  using ::max_align_t;
      ^

然后解决它:

main.cpp(已修复)

#include <cstddef>
#include <cstdio>

int main()
{
    using ::max_align_t;
    puts("Hello World");
    return 0;
}

编译并运行它:

$ g++ -std=c++11 -o test main.cpp
$ ./test
Hello World

答案 1 :(得分:0)

我在CentOS上使用GNU C ++ 4.9编译了一些代码,但无法通过确保最高位置#include(或使用较旧的标头名称stddef.h)来解决该问题。

很奇怪,我在编译器库的所有头文件中搜索了max_aling_t的全局定义,该全局定义在令人讨厌的 using 声明中声明……却没有发现!可能在某些“内部编译标头中”吗?

所以我简单地注释掉了“使用:: max_align_t;”。标准标头中的一行(确实不为此感到骄傲),它解决了问题...并且代码正在运行...

如果有人可以解释此max_align_t的含义/影响?

答案 2 :(得分:-1)

我还注释了using ::max_align_t;中的/usr/include/c++/4.9/cstddef行,而代码正在运行,但是我不知道这样做是否会产生任何后果...