C++ 使用“时出现编译器错误”;近;作为变量名

C++ 使用“时出现编译器错误”;近;作为变量名,c++,compiler-errors,C++,Compiler Errors,我的代码中有一个非常奇怪的错误。我用C++创建了这个类: class Tester{ float f; Tester(float,float); }; 我是这样实现的: Tester::Tester(float near,float a){ this->f=near/a; } 我得到以下错误: ..\src\Tester.cpp: In constructor 'Tester::Tester(float, float)': ..\src\Tester.cpp:4

我的代码中有一个非常奇怪的错误。我用C++创建了这个类:

class Tester{
    float f;
    Tester(float,float);
};
我是这样实现的:

Tester::Tester(float near,float a){
    this->f=near/a;
}
我得到以下错误:

..\src\Tester.cpp: In constructor 'Tester::Tester(float, float)':
..\src\Tester.cpp:4:14: error: expected primary-expression before '/' token
  this->f=near/a;
              ^
当我将
near
重命名为其他名称时,错误消失。这当然没什么大不了的,因为我可以重命名变量,但我只是好奇你们中是否有人知道原因

更新:


原因是
windef.h
的加入。它是由
windows.h
通过
wglext.h

包含的。似乎编译器在某些头中将near定义为宏。通常,此宏与“近”指针一起使用

编译器似乎在某些头中将near定义为宏。通常,此宏与“近”指针一起使用

也许可以试试#undef near?你可能想提到你正在使用的平台和工具链。这很可能会有影响。也许还可以尝试公开构造函数。对我来说,这些都是过去糟糕的远近记忆寻址的遗留问题。谢谢,我刚刚发现,#undef也工作得很好。我不知道内存关键字。也许试试#undef near?你可能想提到你正在使用的平台和工具链。这很可能会有影响。也许还可以尝试公开构造函数。对我来说,这些都是过去糟糕的远近记忆寻址的遗留问题。谢谢,我刚刚发现,#undef也工作得很好。我不知道记忆关键字。