Xcode无法找到'std'命名空间

Jea*_*lho 1 c++ xcode ios

我有以下代码

#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)

有没有包含我遗失的内容?

bam*_*s53 6

您需要包含您使用的库组件的标头.在这种情况下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)