【问题标题】:resolving a typedef, and namespaces VS2010解析 typedef 和命名空间 VS2010
【发布时间】:2012-03-10 04:55:45
【问题描述】:

我正在制作一个物理引擎(借助一本书),这本书建议我为引擎创建一个命名空间,并在第一部分为变量声明一个“typedef”,例如所以

typedef float real;

我可以理解作者给出的解释是“如果需要更改精度,那么您可以转到这一行并更改它,然后可能最多需要更改 10 个辅助函数,以及表示的清晰度,但我认为它与其他两件事不谋而合,所以我希望这是可以遵循的。

这本书要求我在一个文件中定义 typedef 和辅助函数(以在需要更改时最大限度地减少文件跳跃),然后在编译其他文件之前将其包含在内,并在命名空间中完成所有这些工作(我命名为 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+空格键的完成建议)我也有一些我使用的辅助函数(自制 pow()、sqrt())我如果不在一个类中使用它会导致链接器错误,但是当我将它们内联时这就会消失。解析链接器是一件坏事吗?

【问题讨论】:

  • 你检查过头文件的拼写吗? "genfunction.h""genFunction.h" ?
  • 这是一个概括,在我的代码中也是一样的。有问题更正
  • 这里写的代码看起来不错。 IDE 无法识别它的事实可能意味着上游某处存在错字,该错字本身(不一定)是非法的,但会弄乱您的定义。首先,您可以尝试简单的干净重建,有时会有所帮助 - 如果没有,您可能需要发布更多代码。首先将相关位提取到您自己机器上的测试用例中。如果一个最小的例子重现它,我们可以提供更多帮助。如果最小示例没有重现它,那么您正在自己寻找问题的路上。
  • 也许你已经知道这一点(并且你故意在你的代码 sn-ps 中忽略了它们),但你应该在你的头文件中使用 include 保护 (en.wikipedia.org/wiki/Include_guard) .随着您的项目变得越来越大,这种标准做法将为您节省各种痛苦。
  • @gardian06 :最好始终使用包含守卫,无论依赖项是什么。 FileA.h 这个项目可能只有另一个文件依赖于它,但也许它会对另一个项目有更多的依赖。始终使用包含保护将使您的头文件更加面向未来并且更易于重用。

标签: c++ visual-studio-2010 namespaces typedef


【解决方案1】:

首先,编译器没有抛出任何东西。 既然你没有另外说,我假设你的代码编译得很好。问题出在 Intellisense 上,仅此而已。

C++ 中的 Intellisense 是出了名的不稳定。有时它起作用,有时它不起作用。这可能取决于月相。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    相关资源
    最近更新 更多