解析typedef和命名空间VS2010
resolving a typedef, and namespaces VS2010
我正在制作一个物理引擎(在一本书的帮助下),这本书建议我为引擎创建一个名称空间,并在第一部分中为类似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或重建?)的问题,直到它决定重新分析您的代码。
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- 在vs2010中使用iostream时,出现错误C2039:'exit':不是"全局命名空间"的成员
- C++VS2010链接器关于命名空间变量的错误
- 命名空间 X 中具有类 X 的模板类 Y 无法在 VS2010 中编译
- 使用命名空间并发C++VS2010;没有具有该名称的命名空间
- 解析typedef和命名空间VS2010
- CBLAS_ORDER不是带有gcc的类或命名空间,但在VS2010(英特尔C++)中编译良好