1

-std=c++0x次のようなコードがあるため、g++ 4.4.7 で C++ コードをコンパイルするときにオプションを使用しています。

typedef enum Qualifier {AUTO, CONST, REG, STATIC, VOLATILE} Qualifier;
...
Qualifier q = Qualifier::AUTO;

このオプションを指定して g++ を使用して、ソース ファイルをコンパイルできます。しかし、g++ コマンドを makefile に入れても、うまくいきませんでした! GNU make は、g++ コマンドの実行時にこのオプションを無視します (.o ファイルの出力フォルダーも無視して、それらを現在のフォルダーに置きます)。

私の GNU make のバージョンは 3.81 で、makefile の一部は次のとおりです。

VPATH = src:obj

all : CCompiler 

CCompiler : main.o  CodeGenerator.o  FileWraper.o  ir.tab.o \
            lex.ir.o  lex.yy.o  Symbol.o  SymbolTable.o  yacc.tab.o
    g++ -std=c++0x -o bin/CCompiler  obj/*.o

    main.o : src/main.cpp \
        src/FileWraper.h  src/Log.h  src/SymbolTable.h  src/Symbol.h  src/CodeGenerator.h
        g++ -std=c++0x -c -o ./obj/main.o src/main.cpp

    CodeGenerator.o : src/CodeGenerator.cpp \
        src/CodeGenerator.h  src/Symbol.h  src/SymbolTable.h
        g++ -std=c++0x -c -o ./obj/CodeGenerator.o src/CodeGenerator.cpp

私のプロジェクト ディレクトリは次のように構成されています。

    CCompiler/
        Makefile
        src/
        bin/
        obj/

make を実行すると、シェルは次のように表示しました。

[root@cn CCompiler]$  make
g++    -c -o main.o src/main.cpp
In file included from src/SymbolTable.h:6,
                 from src/main.cpp:4:
src/Symbol.h:112: error: ‘Qualifier’ is not a class or namespace
make: *** [main.o] Error 1

なぜこのようなことが起こったのか、どうすれば解決できるのでしょうか?

どうもありがとう!

4

1 に答える 1