ISO C++禁止声明'tuple'没有类型

Jaw*_*wap 8 c++ tuples g++ std std-pair

在尝试编译一个简单的类(g++ myclass.cpp)时,我收到以下错误:

#ifndef MYCLASS
#define MYCLASS

#include <iostream>
#include <tuple>

class MyClass {
    std::tuple<bool, int, int> my_method();
};

#endif
Run Code Online (Sandbox Code Playgroud)

我搜索了这个问题,在大多数情况下,人们似乎忘了std::或包括<tuple>在标题中.但我有两个.这是我的代码:

myclass.h

#include "myclass.h"

using namespace std;

tuple<bool, int, int> MyClass::my_method() {
    return make_tuple(true, 1, 1);
}
Run Code Online (Sandbox Code Playgroud)

myclass.cpp

#ifndef MYCLASS
#define MYCLASS

#include <iostream>
#include <tuple>

class MyClass {
    std::tuple<bool, int, int> my_method();
};

#endif
Run Code Online (Sandbox Code Playgroud)

如果我使用pair相反的方法,省略第二个int和包括<set>,它的工作原理.

我错过了什么?

编辑:

这是完整的输出:

#include "myclass.h"

using namespace std;

tuple<bool, int, int> MyClass::my_method() {
    return make_tuple(true, 1, 1);
}
Run Code Online (Sandbox Code Playgroud)

#ifndef MYCLASS
#define MYCLASS

#include <iostream>
#include <tuple>

class MyClass {
    std::tuple<bool, int, int> my_method();
};

#endif
Run Code Online (Sandbox Code Playgroud)

Kik*_*ohs 17

每个mac附带的GCC 4.2.1已过时.它无法识别C++ 11.

您需要使用以下代码编译代码:c ++而不是调用clang的g ++,这是mac上正式更新的编译器.

c++ -std=c++11 -stdlib=libc++ myclass.cpp -o prog 
Run Code Online (Sandbox Code Playgroud)

您需要链接libc ++,它是clang lib,它知道c ++ 11的功能,而不是gcc使用的默认libstdc ++.


Lig*_*ica 5

更新!我们这些天正在使用GCC 4.7.

GCC 4.2.1始于2007年7月18日.只有很少的机会它支持C++ 11中的任何功能.

也就是说,它可能会提供一些std::tr1(即std::tr1::tuple<T1, T2, ...>),这是一些C++ 11功能在标准化之前的时间内存在的地方,尽管我不知道这些只是在4.4中引入GCC.