【发布时间】:2022-09-23 03:44:52
【问题描述】:
我正在使用 Visual Studio Code 学习 C++。我开始绞尽脑汁想弄清楚为什么编译器不能识别 C++11 标准。代码+.json文件+错误如下:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <int> vector_numbers;
for (int i : vector_numbers) {
vector_numbers[1] = i + 1;
}
for (int i : vector_numbers) {
cout << \"The vector element at index [\" << i << \"] is \" << vector_numbers.at(i) << endl;
}
return 0;
}
tasks.json 中 \"args\" 参数的内容是
\"args\": [
\"-std=c++11\",
\"-std=c++17\",
\"-std=c++20\",
\"-stdlib=libc++\",
\"-fcolor-diagnostics\",
\"-fansi-escape-codes\",
\"-g\",
\"${file}\",
\"-o\",
\"${fileDirname}/${fileBasenameNoExtension}\"
]
错误是:
<REDACTED> % cd \"<REDACTED PATH>\" && g++ Vectors.cpp -o Vectors && \"<REDACTED PATH>\"Vectors
Vectors.cpp:9:16: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
for (int i : vector_numbers) {
^
Vectors.cpp:13:16: warning: range-based for loop is a C++11 extension [-Wc++11-extensions]
for (int i : vector_numbers) {
^
2 warnings generated.
-
从控制台输出来看,
tasks.json中的args实际上都没有进入编译器调用。仔细检查您实际上是否在使用该 json 文件? -
此外,gcc 自 6.1 版起默认启用 C++14,因此您的编译器必须是旧的。你可以考虑升级一下。
-
@Yksisarvinen CLI 命令
g++ -v返回:\'Apple clang 版本 13.1.6 (clang-1316.0.21.2.5) 目标:x86_64-apple-darwin21.6.0 线程模型:posix InstalledDir: <REDACTED>\' -
后面的标志会覆盖前面的标志,但是当您使用
-std=c++20时,没有理由使用-std=c++11。只有后者就足够了。但是如上所述,显示的编译实际上没有使用任何标志,因此您必须将它们放在错误的位置(或者没有保存文件或类似的东西)。另外,您使用的是 Clang,而不是 GCC。您可能在 Apple 设备上,其中g++的别名为clang++。 -
clang 13 应该吃掉那个代码并微笑,所以一定有一个
-std=c++98潜伏在镜头外的某个地方。寻找它。
标签: c++ json c++11 visual-studio-code c++20