C++ 解析类型定义和名称空间VS2010

C++ 解析类型定义和名称空间VS2010,c++,visual-studio-2010,namespaces,typedef,C++,Visual Studio 2010,Namespaces,Typedef,我正在制作一个物理引擎(借助一本书),书中建议我为引擎创建一个名称空间,在第一部分中,我为这样的变量声明一个“typedef” typedef float real; 我可以理解作者给出的解释是“如果精度需要改变,你只需转到这一行,改变它,然后可能需要改变最多10个辅助函数,以及表示的清晰性,但我认为这与其他两件事是一致的,所以我希望这是可以遵循的 这本书要求我在一个文件中定义typedef和helper函数(如果需要更改,则尽量减少文件跳转),然后在编译其他文件之前包含这些函数,并在名称空间

我正在制作一个物理引擎(借助一本书),书中建议我为引擎创建一个名称空间,在第一部分中,我为这样的变量声明一个“typedef”

typedef float real;
我可以理解作者给出的解释是“如果精度需要改变,你只需转到这一行,改变它,然后可能需要改变最多10个辅助函数,以及表示的清晰性,但我认为这与其他两件事是一致的,所以我希望这是可以遵循的

这本书要求我在一个文件中定义typedef和helper函数(如果需要更改,则尽量减少文件跳转),然后在编译其他文件之前包含这些函数,并在名称空间中完成所有这些(我称为Physics),然后在另一个文件中创建要在引擎中使用的类

genFunction.h
namespace Physics{
typedef float real;
}


Classes.h
#include "genFunction.h"
namespace Physics{
class Vector3{
public :
    real x;   // visual studio is throwing that Physics::real is not a type name
    real y;
    real z;
    // VS is not offering collapsing, or any form of 
    // auto/assistance with lines.
    // almost like it does not want me to have classes
    // in my own namespaces
    Vector3(){ // uncolapsable 
        x = 0;
        y = 0;
        z = 0;
    }
};
}
考虑到编译器忽略了我已经做了一个typedef,并且这是问题发生的范围,并且当我在自制名称空间中的类中时,VS甚至没有显示建议的事实,我是否做错了什么


编辑:找到类型解析的主要解决方案。显然,我没有使用
{
而是在其中一个方法上添加了
),这导致它的行为就像整个命名空间不存在一样。尽管VS仍然不会给我任何帮助(函数/类/命名空间崩溃,或者即使使用ctrl+spacebar,也会提供完成建议)此外,我还使用了一些助手函数(自制的pow(),sqrt()),如果不在类中,这些函数会导致链接器错误,但当我将内联放在它们上时,这些函数就会消失。解析链接器是件坏事吗?

首先,编译器不会抛出任何东西。 既然你没有说过其他的话,我就假设你的代码编译得很好。问题是Intellisense的问题,仅此而已

C++中的智能感知是不可靠的,有时是有效的,有时是有效的。它可能取决于月亮的相位。

有时,您可以通过更明确的方式来“鼓励”它。如果您键入
,它应该建议全局命名空间的所有成员。
::Physics:
,并且它应该建议
Physics
命名空间的成员


可能只是等待(或重新启动VS或重建?)直到它决定重新分析您的代码。

您是否检查了头文件的拼写?
“genfunction.h”
“genfunction.h”“
?这是一种泛化,在我的代码中也是如此。有疑问地更正了此处编写的代码看起来不错。IDE无法识别它的事实可能意味着上游某个地方有一个错误(不一定)它本身是非法的,但会弄乱你的定义。首先,你可以尝试一个简单的干净的重建,有时会有帮助-如果没有,你可能需要发布更多的代码。首先,在你自己的机器上将相关的位提取到测试用例中。如果一个最小的示例复制了它,我们可以提供更多帮助。如果最小的示例没有复制它,您正在自行查找问题。也许您已经知道这一点(并且您在代码段中有意将其忽略),但您应该在头文件中使用include-guard()。当项目变得越来越大时,这种标准做法将为您省去各种痛苦。@gardian06:无论依赖项是什么,最好始终使用include guards。
FileA.h
此项目可能只有另一个依赖于它的文件,但它可能会更多地依赖于另一个项目。始终使用include guards将l使您的头文件更经得起未来考验,更易于重用。