我有以下代码
#ifndef TPSO1_thread_h
#define TPSO1_thread_h
#define _XOPEN_SOURCE
#include <ucontext.h>
struct Thread_Greater;
class Thread {
...
friend struct Thread_Greater;
friend class Scheduler;
};
struct Thread_Greater : public std::binary_function <Thread,Thread,bool> {
...
};
#endif
Run Code Online (Sandbox Code Playgroud)
在.h文件中.问题是,当我尝试在xcode中编译它时,它说
#Error: use of undeclared identifier 'std'
Run Code Online (Sandbox Code Playgroud)
在线
struct Thread_Greater : public std::binary_function <Thread,Thread,bool> {
Run Code Online (Sandbox Code Playgroud)
有没有包含我遗失的内容?
您需要包含您使用的库组件的标头.在这种情况下std::binary_function是<functional>,所以你需要在你的代码这一行:
#include <functional>
Run Code Online (Sandbox Code Playgroud)
只是为了解释一下,std命名空间不是内置于C++语言(主要是).除非它实际在程序中的某个地方声明,否则就编译器而言它并不存在.
甚至可以构建不使用标准库的有用C++程序.C++规范包括甚至可能不包括标准库的模式:独立模式.
如果您使用std命名空间中的某些内容而没有在程序中声明该命名空间,那么您将收到一条错误消息,告知您std尚未声明.
int main() {
std::cout << "Hello\n";
}
main.cpp:2:3: error: use of undeclared identifier 'std'
std::cout << "Hello\n";
^
Run Code Online (Sandbox Code Playgroud)
如果你使用的东西std已被声明,但不是std你正在使用的特定成员,那么你将收到一条关于std不包含你正在使用的东西的错误:
#include <utility> // declares std, but not std::cout
int main() {
std::cout << "Hello\n";
}
main.cpp:4:12: error: no member named 'cout' in namespace 'std'
std::cout << "Hello\n";
~~~~~^
Run Code Online (Sandbox Code Playgroud)