为什么这个C ++程序在编译时失败了?

时间:2015-04-18 12:20:18

标签: c++ c++11 exception-handling compiler-errors

我正在阅读this。我在代码块13.12 IDE上测试了这个程序,它支持C++11,但它在编译时失败了。编译器显示多个错误。看看这个节目。它在在线编译器上工作正常,请参阅this

// bad_array_new_length example
#include <iostream>     // std::cout
#include <exception>    // std::exception
#include <new>          // std::bad_array_new_length

int main() {
  try {
    int* p = new int[-1];
  } catch (std::bad_array_new_length& e) {
    std::cerr << "bad_array_new_length caught: " << e.what() << '\n';
  } catch (std::exception& e) {   // older compilers may throw other exceptions:
    std::cerr << "some other standard exception caught: " << e.what() << '\n';
  }
}

编译器错误:

7   12      [Error] expected type-specifier

7   37      [Error] expected unqualified-id before '&' token

7   37      [Error] expected ')' before '&' token

7   37      [Error] expected '{' before '&' token

7   39      [Error] 'e' was not declared in this scope

7   40      [Error] expected ';' before ')' token

9   5       [Error] expected primary-expression before 'catch'

9   5       [Error] expected ';' before 'catch'

这里出了什么问题?它是编译器错误还是代码块13.12 IDE中不完全支持C++11

请帮帮我。

2 个答案:

答案 0 :(得分:5)

您的编译器不支持std::bad_array_new_length

code blocks 13.12的Google搜索结果显示:

  

codeblocks-13.12mingw-setup.exe文件包含来自TDM-GCC(版本4.7.1,32位)的GCC编译器和GDB调试器。

GCC 4.7.1 was released in 2012。根据{{​​3}},自2013年起,即使 trunk GCC也只支持std::bad_array_new_length

通过平分GCC参考手册,我们可以确定this mailing list postGCC 4.8.4 doesn't have it。您链接的“在线编译器”运行GCC 4.9.2。

长话短说,你需要一个更新的海湾合作委员会。

“C ++ 11支持”是一个非常广泛的术语,你会发现,直到最近,它基本上永远意味着完整的 C ++ 11支持。例如,GCC 4.9.2 does,或者。

答案 1 :(得分:2)

如果您确实使用gcc 4.7.1(可以从your comment了解)查看GCC 4.7.1 Standard C++ Library Reference Manual,您可以看到根据api doc您的gcc版本只是没有没有bad_array_new_length类。