ISO C 禁止没有类型的“元组”声明
ISO C++ forbids declaration of ‘tuple’ with no type
尝试编译简单类(g++ myclass.cpp
)时,我会收到以下错误:
ISO C 禁止没有类型的"元组"声明
我搜索了这个问题,在大多数情况下,人们似乎忘记了std::
或在标题中包括<tuple>
。但是我都有。这是我的代码:
myClass.h
#ifndef MYCLASS
#define MYCLASS
#include <iostream>
#include <tuple>
class MyClass {
std::tuple<bool, int, int> my_method();
};
#endif
myClass.cpp
#include "myclass.h"
using namespace std;
tuple<bool, int, int> MyClass::my_method() {
return make_tuple(true, 1, 1);
}
如果我改用pair
进行相同的操作,请遗漏第二个int
,包括<set>
,它有效。
我缺少什么?
编辑:
这是完整的输出:
$ g myclass.cpp -o prog
之前
在myClass.cpp中包含的文件中:1:
myclass.h:7:错误:ISO C 禁止没有类型的"元组"声明
myclass.h:7:错误:无效使用'::'
myclass.h:7:错误:预期';''&lt;'token
myClass.cpp:5:错误:预期的构造函数,驱动器或类型转换 在"&lt;"代币$ g - version
i686-Apple-darwin11-llvm-g -4.2(GCC)4.2.1(基于Apple Inc.构建5658)
(LLVM构建2336.11.00)
gcc 4.2.1随着每个Mac的运输已过时。它将无法识别C 11。
您需要使用:C 来编译代码,而不是g ,该代码称为Clang,这是Mac上的正式更新编译器。
c++ -std=c++11 -stdlib=libc++ myclass.cpp -o prog
您必须针对libc 链接,该libc 是Clang lib,它知道C 11功能,而不是GCC使用的默认LIBSTDC 。
更新!这些天我们正在使用GCC 4.7。
gcc 4.2.1从2007年7月18日一直到。它只有一个远程机会支持任何的功能。 也就是说,它可能会在std::tr1
(即std::tr1::tuple<T1, T2, ...>
)中提供一些,这是C 11特征中的一些特征在标准化之前的时间居住,尽管我的头顶不在我的头顶上,仅将其引入了4.4中的GCC。
使用GCC 4.2,tuple
在命名空间std::tr1
中。您必须包括<tr1/tuple>
并或多或少地指定您的方法
#ifndef MYCLASS
#define MYCLASS
#include <tr1/tuple>
class MyClass {
std::tr1::tuple<bool, int, int> my_method();
};
#endif
尽管正如其他人已经建议的那样,更新到最近的海湾合作委员会可能更合适。
如果添加了 -std=c++11
(或者,对于 g++
的旧版本 -std=c++0x
)选项,并在成员函数中的表达式之后添加一个simicolon,则代码编译了代码。如果这不起作用,则可能有一个版本,该版本仅在命名空间std::tr1
中定义tuple
(似乎,实现提供了<tuple>
标题,因为没有找到<tuple>
的错误)。
- C++:TypeDef使用元组
- Pybind11:将元组列表从Python传递到C++
- 重载元组索引运算符-C++
- 在C++中,如何通过几种类型从元组中选择多个元素
- 将fold表达式与std::一起用于两个元组
- std::ranges::elements_view,用于自定义类似元组的数据
- 将元组的向量转换/构造为堆
- 编译器对数组声明大小的计算。什么时候发生?
- 专用于 std 元组的模板,而无需用户执行remove_cvref
- 将元组的向量构造成堆
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 将元组类型扩展为可变参数模板?
- 时间复杂度 当具有复合数据类型(如元组或对)时?
- 在Windows元组上构建64位Python扩展:未声明的标识符
- 带有元组声明的类模板
- 如何在没有的情况下声明具有统一类型的元组<array>?
- ISO C 禁止没有类型的“元组”声明
- 如何使用可变模板声明std::元组
- 元组中的前向声明和交叉引用
- 使用数组作为元组成员:有效的C++11元组声明