Я изменил свой Makefile на версию C ++ 11, но все еще получаю ошибку инициализатора списка - PullRequest
0 голосов
/ 09 января 2020

Я сделал Makefile:

output: main.o ./source/BlackJack.o ./source/Card.o ./source/Game.o ./source/Image.o
    g++ -std=c++11 main.o ./source/BlackJack.o ./source/Card.o ./source/Game.o ./source/Image.o -o BlackJack

main.o: main.cpp
    g++ -std=c++11 -c main.cpp

BlackJack.o: ./source/BlackJack.cpp ./source/BlackJack.hpp
    g++ -std=c++11 -c ./source/BlackJack.cpp

Card.o: ./source/Card.cpp ./source/Card.hpp
    g++ -std=c++11 -c ./source/Card.cpp

Image.o: ./source/Image.cpp ./source/Image.hpp
    g++ -std=c++11 -c ./source/Image.cpp

Но я все еще получаю сообщение об ошибке

source/Game.cpp:80:20: error: non-aggregate type 'vector<Casino>' cannot be
      initialized with an initializer list
    vector<Casino> casVec = {flamingo, mirage, bellagio};

Мне кажется, я изменил версию компилятора на c ++ 11.

Чего мне не хватает?

1 Ответ

1 голос
/ 09 января 2020

Ваш Makefile не имеет записи для source/Game.o: source/Game.cpp, поэтому он возвращается к встроенному правилу:

.cpp.o:
    $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $(OUTPUT_OPTION) $<

..., которое автоматически не компилируется как C ++ 11.

Таким образом, вы можете значительно упростить ваш Makefile, выполнив

CXXFLAGS += -std=c++11

и удалив все ваши собственные правила для компиляции cpp файлов.

Вы также можете потратить некоторое время на изучение CMake, где вы можете определить свои источники, цели и параметры компиляции на более высоком уровне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...