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 ++.
更新!我们这些天正在使用GCC 4.7.
GCC 4.2.1始于2007年7月18日.只有很少的机会它支持C++ 11中的任何功能.
也就是说,它可能会提供一些std::tr1
(即std::tr1::tuple<T1, T2, ...>
),这是一些C++ 11功能在标准化之前的时间内存在的地方,尽管我不知道这些只是在4.4中引入GCC.