以下是代码:错误显示在main.hpp的第8行。
//main.hpp
#ifndef MAIN_HPP // if main.hpp hasn't been included yet...
#define MAIN_HPP // #define this so the compiler knows it has been included
#include <array> // OFFENDING LINE 8
using std:array
class Quicksort {
public:
void sort(array);
};
#endif
此c ++文件正在使用此标头。
#include "main.hpp"
// this is just the start of a quicksort algorithm, base case only
void Quicksort::sort (array list) {
if (list.size == 1 || list.size == 0) {
return;
}
}
为什么我收到此错误?我以为我的C ++和g ++都很好。其他任何原因可能无法正常工作?
我正在使用该命令进行编译(在Mac上,使用最新的X-Code):g ++ 4.2版 g ++ -Wall -c quicksort.cpp
当我使用-std = c ++ 11时,它说: 无法识别的命令行选项“-std = c ++ 11”
答案 0 :(得分:3)
您需要C ++ 11支持才能包含<array>
。在GCC上,您需要使用-std=c++0x
标志(或最新版本的-std = c ++ 11)。
此外,array
位于std
命名空间中,而可能意味着传递引用:
void sort(std::array&);
如果您的编译器不支持C ++ 11的相关部分,您可以使用TR1中的版本:
#include <tr1/array>
...
std::tr1::array<int, 5> a = ...;
答案 1 :(得分:0)
您忘记在4.7.0之前的旧版本GCC中加入-std=c++11
或-std=gnu++11
(-std=c++0x
和-std=gnu++0x
,后者包括扩展名。如果仍然无效,那么您需要更新版本的GCC。