我在类中有以下 typedef 定义
/*
*ReportData.h
*/
class ReportData {
public:
/** Classifiers information **/
typedef struct{
char *classifier;
uint8_t numCategories;
char **categories;
int *ranges;
} Classification;
};
这段代码稍后引用如下
/*
* DynamicCarDetection.cpp
*/
#include <DataReport.h>
int numOfClassGroups = 1;
int numOfCategories = 2;
ReportData::Classification *vehiclesClassificators;
vehiclesClassificators = new ReportData::Classification[numOfClassGroups];
vehiclesClassificators[i].numCategories = NumOfcategories;
vehiclesClassificators[i].categories = new char *[numOfcategories];
当我尝试使用此命令进行编译时
g++ -c DynamicCarDetection.cpp -I ./
我在每次引用车辆分类器时都会遇到此错误
DynamicCarDetection.cpp:12:1:错误:“vehiclesClassificators”不 命名一个类型
看起来像是一个明显的名称范围错误,但我一直在努力理解问题是什么,因为显然 typedef ReportData::Classification 正在被识别。
提前非常感谢
在C++中,句子(除了一些极端情况)必须是函数体的一部分。而你的 CPP 文件中没有,所以编译器会对你在做什么感到困惑。
#include <DataReport.h>
void DoThings()
{
int numOfClassGroups = 1;
//....
}
即使我发现答案也太晚了。
我英文不好,express也不好,谢谢。我发现一件事可能会导致这个问题。
您在项目中是否发现了任何旧的错误文件?当我在 vscode 中使用 g++ 编译项目时,我在项目中看到一个名为 tempCodeRunnerFile.cpp 的错误提示文件。但我在 settings.jsion 文件中设置了一些隐式选择,这会导致文件消失。通过删除 settings.json 文件,我看到了导致问题的隐式错误提示文件。