解析typedef和命名空间VS2010

resolving a typedef, and namespaces VS2010

本文关键字:VS2010 命名空间 typedef 解析      更新时间:2023-10-16

我正在制作一个物理引擎(在一本书的帮助下),这本书建议我为引擎创建一个名称空间,并在第一部分中为类似so 的变量声明一个"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++中的Intellisense是出了名的不稳定。有时有效,有时无效。这可能取决于月相。

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

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