我尝试将std::map
与任何类型参数的变体一起使用时,我给出了红色语法突出显示应指示编译器错误,但我仍然能够编译和运行没有问题。我重新启动了visual studio,清理了我的项目,并重建了项目,但问题仍然存在。我也尝试删除.sdf
,因为我认为它可能会在它的历史中保存一些奇怪的东西,至少从我研究过它可能是原因。我也在警告级别4;我试图降低它,但没有果汁。
编辑1: 它实际上只是一个成员函数的一部分,如果它在一个自由函数中,我没有得到任何语法高亮。
编辑2:
的main.cpp
#include "MCVE.h"
int main()
{
return 0;
}
MCVE.cpp
#include "MCVE.h"
#include <map>
MCVE::MCVE()
{
}
void MCVE::Test() const
{
// syntax highlighting error appears here
std::map<std::string, int> myMap;
}
MCVE::~MCVE()
{
}
MCVE.h
#pragma once
class MCVE
{
public:
MCVE();
void Test() const;
~MCVE();
};
编辑3:我已经接受了Pete Becker的回答,但问题似乎只存在于我的本地计算机上。我用Visual Studio标记了这个,因为我认为它有问题,因为它只在我的家用电脑上有突出显示问题,而不是我的工作电脑。
最终修改:问题是,我遇到问题的类的基本类型中包含的标题之一是使用header guards
而不是{ {1}}就像我正在处理的文件一样。添加正确的pragma once
语句并明确说明函数的命名空间并没有解决它。只有将#include
更改为header guards
才能解决问题。
答案 0 :(得分:1)
新代码仍然缺失#include <string>
。编译器没有抱怨名称std::string
这一事实只意味着它已在某处被宣布;标头通常使用在其他地方定义的名称的前向声明来避免标头膨胀。这样做很好,并且符合标准,但您必须遵循#include
指令的规则,以获得您使用的每种标准库类型的相应标头。