包含标头的 C++ 错误

Posted

技术标签:

【中文标题】包含标头的 C++ 错误【英文标题】:C++ error with included headers 【发布时间】:2016-01-11 23:10:04 【问题描述】:

我在 Linux 操作系统 (LUbuntu 15.05) 上编译 C++ 代码时遇到问题。

我在 XUbuntu 14.10、Arch 和 Gentoo Linux 上编译的代码相同。一切都很好。现在我在家用台式电脑上安装 LUbuntu,当我开始制作时,我给出了这个错误:

g++ -O2 -Wall -o main.o main.cpp
In file included from /usr/include/i386-linux-gnu/c++/5/bits/gthr-default.h:35:0,
                 from /usr/include/i386-linux-gnu/c++/5/bits/gthr.h:148,
                 from /usr/include/c++/5/ext/atomicity.h:35,
                 from /usr/include/c++/5/bits/ios_base.h:39,
                 from /usr/include/c++/5/ios:42,
                 from /usr/include/c++/5/ostream:38,
                 from /usr/include/c++/5/iostream:39,
                 from main.h:8,
                 from main.cpp:1:
/usr/include/pthread.h:1058:55: error: ‘_lock’ was not declared in this scope
 extern int pthread_spin_trylock (pthread_spinlock_t *[_lock)
                                                       ^
/usr/include/pthread.h:1058:54: error: expected ‘,’ or ‘...’ before ‘[’ token
 extern int pthread_spin_trylock (pthread_spinlock_t *[_lock)
                                                      ^
Makefile:30: recipe for target 'main.o' failed
make: *** [main.o] Error 1

这是我的 main.h 文件:

#ifndef MAIN_H
#define MAIN_H
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <SDL/SDL_mixer.h>
#include <SDL/SDL_image.h>
#include <iostream>
#include <vector>

#endif  // MAIN_H

我不知道该怎么办。我安装了 build-essential。 请帮忙。

【问题讨论】:

嗯,这不是 c++ 语法。如果您有权访问该文件,请从 (pthread_spinlock_t *[_lock) 中删除 [ 【参考方案1】:

我查看了系统中的那个文件,非常接近第 1058 行,有这一行:

extern int pthread_spin_trylock (pthread_spinlock_t *__lock)

奇怪...您的线路有一个[ 而不是预期的_...

如果您查看_[ 的ascii 值,它们是:

_: 95 = 0x5F = 01011111
[: 91 = 0x5B = 01011011

看,只是一点点不同。也许您的硬盘(sd 卡?)是cosmic ray 的受害者,但我会全面扫描硬盘和内存,以防万一。

然后,您当然应该重新安装相关软件包。我认为是 libc6-dev,而不是 build-essential,这是一个仅依赖包,或者任何 Debian 调用它。

【讨论】:

以上是关于包含标头的 C++ 错误的主要内容,如果未能解决你的问题,请参考以下文章

包含标头时的 C++ OpenGL LNK2001

C++:包含父类时出现多重定义错误?

致命错误 C1189:#error:core.hpp 标头必须编译为 C++

OpenCV for iOS 框架错误“Base.hpp”标头必须编译为 C++

CUDA 上的“错误包含 cudart 标头”错误

当我使用标头时,C++ 函数会引发错误,但如果我在源代码中定义它则不会?