g++のレアなエラー「前のエラーにより混乱していますので、脱出します」


このエントリーをはてなブックマークに追加

人間味あふれるエラーに初遭遇したのでご報告します。現時点でGoogle検索すると792件。

エラーを起こす方法。Windows 7 + Cygwin + g++ 4.8.2にて、g++ -std-std=c++11というコマンドで以下のコードを実行。何重にもミスがあるひどいコードである。

#include <vector>
using namespace std;

class MyClass {

private:
    const int INF = 1e9;
    vector<int> G;

public:
    MyClass(int V){
        G.resize(V);
    }
};


class MyClass2 {
public:
    func(void) {
        m = MyClass(10);
    }

private:
    MyClass m;
}

int main(){
    return 0;
}

出力されるエラー。

confused.cpp:21:14: エラー: ISO C++ では型の無い ‘func’ の宣言を禁止しています [-fpermissive]
     func(void) {
              ^
confused.cpp:27:1: エラー: クラス定義の後には ‘;’ が予期されます
 }
 ^
confused.cpp: メンバ関数 ‘int MyClass2::func()’ 内:
confused.cpp:22:11: エラー: use of deleted function ‘MyClass& MyClass::operator=(MyClass&&)’
         m = MyClass(10);
           ^
confused.cpp:5:7: 備考: ‘MyClass& MyClass::operator=(MyClass&&)’ is implicitly deleted because the default definition would be ill-formed:
 class MyClass {
       ^
confused.cpp:5:7: エラー: non-static const member ‘const int MyClass::INF’, can’t use default assignment operator
confused.cpp:22: 前のエラーにより混乱していますので、脱出します