VS C ++ 2010 Express问题(IDE /头文件HELL?)

时间:2011-02-13 16:31:11

标签: c++ visual-studio-2010 ide header compiler-errors

我几乎完成了我的游戏逻辑引擎的初稿,它是基于实体/组件的。它并非完全基于这种理念,但我也认为实施的方式因人而异。我正在使用OOP,STL和虚函数编写C ++。是的,我知道虚函数可能很慢,但它不是一个非常快速的做法,只是一个逻辑引擎,可以很容易地扩展和容易被其他人理解(一切都被评论)。这只是一个游戏开发新手的“软件设计”练习,如果您可能希望这样称呼它。

我的初稿几乎完成,核心服务(各种inits,directX等)与游戏逻辑分离,随时可以使用。我只是想在完成我的第一个原型游戏之前完成逻辑引擎(我想一个等距的ARPG)。 GL引擎像类的树一样构建,从顶部开始,带有基本的抽象类“实体”,并从中派生出越来越多的特定类。出于良好的设计原因,任何地方的继承都不超过3或4级。我认为。

但是我可能会遇到一个严重的问题:在某些我声明为另一个类的成员变量对象的类中,会发生这种情况:在IDE启动并分析我写的内容后,它会强调那些特定成员变量的类型(类名),它说它没有在任何地方声明。然后经过一秒钟后,红色下划线消失,它表示没问题并且每次分析代码时都会声明(o.O)重新开始。这种情况也发生在另一个具有其他类型类的类中。为了清楚起见,我确实包含了所有相关的标题,并且它应该知道类型的声明以及它在哪里完成。

另外,如果我尝试编译,它会为每个违规变量成对提供gl_nonrenderableentity.h(21): error C2143: syntax error : missing ';' before '*'gl_nonrenderableentity.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

我知道其原因并不是在任何地方找到它的类型(奇怪的是,IDE发现,每次分析后差不多一秒钟)。有时这些错误会在编译器的输出中重复出来,并且稍微调整一下如何包含头文件后,我每个变量只获得一个副本(而且它仍然没有意义,我使用包含警卫..不是VS 2010 Express了解pragma?)

我认为它可能是一个标题问题,但对我来说最有趣的事情是:为什么IDE用红色强调变量的类型,说它无法找到它,并在一两秒之后找到它,没有更多的问题,但是当我编译所有项目时,它给了我前面提到的错误。

每当我遇到问题时,我都会自行研究并找到解决方案,甚至是IDE(着名的msbuild错误)的问题。但我无法弄清楚这一点,我需要退伍军人的帮助。任何人都知道为什么IDE会这样做?每次分析IDE后,消失的红色下划线必须具有某种意义。我知道当你写到IDE找到它们的声明时,这会发生新的变量,但它只有一次然后它就没问题了......对于那两个特定的类,它总是一次又一次(这些是唯一的有这个问题)。来自其他类的其他成员变量没有这个问题。

谢谢。对不起,很长的帖子,但我尽力让自己变得清醒。如果有人想要更多信息,请... ..

解决

这是一个循环引用问题,只需使用前向声明就可以了。

1 个答案:

答案 0 :(得分:0)

我能想到的唯一原因是循环引用,即使它可能不会立即明显,检查(并可能修复)这个的简单方法是为另一个类添加前向声明:

class NonRenderableEntity;

class Action:public NonRenderableObject
{
    ...
    NonRenderableEntity *userEntity;
    ...
};

另外,不要太认真地对IntelliSense进行检查(红色下划线) - 它并不完美,可能会让人感到困惑,特别是对于这样的复杂引用。

更新:只要您只使用指向对象的指针,循环引用就不会出现问题。因为指针的大小独立于实际对象,所以编译器可以事先分配指针而不会出现问题。在诸如C#之类的语言中,对象总是通过引用(指针)进行操作,因此这个问题不会浮出水面。