Vscode/ESP-IDF 错误命名空间“std”没有成员“array”无论如何都会编译
Posted
技术标签:
【中文标题】Vscode/ESP-IDF 错误命名空间“std”没有成员“array”无论如何都会编译【英文标题】:Vscode/ESP-IDF Errors namespace "std" has no member "array" will compile anyways 【发布时间】:2021-08-01 22:02:07 【问题描述】:我刚刚安装了最新版本的 VScode,加上 Arduino 扩展和最新的 ESP-IDF,我正在尝试编写一个 adafruit esp32 羽毛。
当使用我在 Arduino IDE 版本 1.8.15 中编写的代码时,并且还在测试版 Arduino-DE 2.0.9 中进行了测试,我没有出现任何错误。
一个初始样本是:
#include <array>
//#include <utility/imumaths.h>
//#include <driver/adc.h>
#include <MPU9250.h>
#include <Madgwick.h>
#include <TaskScheduler.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BNO055.h>
#include <utility/imumaths.h>
#include <driver/adc.h>
//#define betaDef = 10f;
Adafruit_BNO055 bno = Adafruit_BNO055(-1, 0x28);
std::array<std::array<float, 3> , 2> vals = 0;
void taskPrint();
//Tasks
Task t1(1, TASK_FOREVER, &taskPrint);
Scheduler runner;
void taskPrint()
Serial.print(vals[0][0]);
Serial.print(',');
Serial.print(vals[0][1]);
Serial.print(',');
Serial.print(vals[0][2]);
Serial.print(',');
Serial.print(vals[1][0]);
Serial.print(',');
Serial.print(vals[1][1]);
Serial.print(',');
Serial.println(vals[1][2]);
;
第 13 行的第一个错误 (namespace "std" has no member "array"
)。
在 VScode 中使用相同的代码时,Vscode 会验证、抱怨,但无论如何都会编译和上传(代码在 esp32 上继续正常工作)。带有不断的曲线标记和错误。
我检查了 c_cpp_properties,发现 esp-idf 正在使用 c++11 版本。
"version": 4,
"configurations": [
"name": "Arduino",
"compilerPath": "C:\\Users\\computer\\AppData\\Local\\Arduino15\\packages\\esp32\\tools\\xtensa-esp32-elf-gcc\\1.22.0-97-gc752ad5-5.2.0\\bin\\xtensa-esp32-elf-g++",
"compilerArgs": [
"-std=gnu++11",
"-Wpointer-arith",
"-fexceptions",
"-fstack-protector",
"-ffunction-sections",
"-fdata-sections",
"-fstrict-volatile-bitfields",
"-mlongcalls",
"-nostdlib",
"-w",
"-Wno-error=maybe-uninitialized",
"-Wno-error=unused-function",
"-Wno-error=unused-but-set-variable",
"-Wno-error=unused-variable",
"-Wno-error=deprecated-declarations",
"-Wno-unused-parameter",
"-Wno-unused-but-set-parameter",
"-Wno-missing-field-initializers",
"-Wno-sign-compare",
"-fno-rtti"
],
"intelliSenseMode": "gcc-x64",
"includePath": [
//a whole tonne of paths
]
"forcedInclude":["C:\\Users\\computer\\AppData\\Local\\Arduino15\\packages\\esp32\\hardware\\esp32\\1.0.6\\cores\\esp32\\Arduino.h"
],
"cStandard": "c11",
"cppStandard": "c++11",
"defines": [ tonnes of defines
]
]
检查 std::array 的 cpp ref 这应该在 cp++11 中得到支持
修改这个文件只会导致 Vscode 用原始设置覆盖它,因为这个错误,我只能假设我得到的其他错误是相关的(所有似乎都有我的数组有各种问题。
namespace "std" has no member "array"C/C++(135)
identifier "vals" is undefinedC/C++(20)
qualified name is not allowedC/C++(283)
explicit type is missing ('int' assumed)C/C++(260)
mag_offsets" is not a nonstatic data member or base class of class "euler"C/C++(292)
虽然我在编码方面很糟糕,但我很确定这个问题与程序或编译器设置有关,而不是我的能力不足。
如何解决这个命名空间问题?我想使用 Vscode 对我的嵌入式项目进行编程……但目前,除了来自 Intellisense 的看似虚假的报告外,我什么也没得到。
【问题讨论】:
【参考方案1】:如果没有所有文件,重现您的错误有点困难,但我建议使用 xtensa-esp32-elf-gcc 而不是 xtensa-esp32-elf-g++ 在 compilerPath 中,因为 Microsoft C/C++ 扩展似乎可以与 gcc 一起使用。
另一个问题可能是 includePaths 或定义中的冲突引用。如果第一种方法不起作用,我建议删除它们。
【讨论】:
以上是关于Vscode/ESP-IDF 错误命名空间“std”没有成员“array”无论如何都会编译的主要内容,如果未能解决你的问题,请参考以下文章