我将 Makefile 更改为 C++11 版本,但仍然收到列表初始值设定项错误

I changed my Makefile into C++11 version, but still getting a List Initializer Error

本文关键字:列表 错误 Makefile C++11 版本 我将      更新时间:2023-10-16

我做了一个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。

我错过了什么?

您的 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,您可以在其中定义源代码、目标和更高级别的编译选项。