C++错误返回类型?

问题描述:

我在Visual Studio中遇到了两组错误,其中包含以下类头文件:C++错误返回类型?

编辑:抱歉,家伙们忘记显示我确实包含了窗口。

#include "Window.h" 

class Spark 
{ 
    public: 

     Window& getWindow(); // #1 
     Window *win;   // #2 
}; 

#1具有以下问题:

error C2143: syntax error : missing ';' before '&' 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

#2有一个非常类似的故事...

error C2143: syntax error : missing ';' before '*' 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 

我是新的C++,所以我可能搞砸向上。我想要做的#1是返回一个Window对象的引用和#2我试图创建一个指针,该对象创建后将被设置为一个窗口对象(因此我使用指针)。

经过四处搜寻并盯着这一段时间,我看不到这两条线有什么问题。它看起来像VS挂在返回类型,基本上没有得到它。但据我所知,我正确地构造了这些声明。

在此先感谢您的帮助。

+3

编译器不知道当前有任何“Window”。 – chris 2013-02-14 05:56:03

+0

如何定义'Window'? – 2013-02-14 05:56:33

+0

“Window”定义在哪里?你忘了一个'#include'吗? – Foggzie 2013-02-14 05:57:05

在我看来,好像类型Window未知。在头文件中包含Window,并确保您使用的是正确的名称空间或使用完全限定的类型名称。

更新: 在循环依赖的情况下,您既可以删除依赖某种方式或使用预先声明,以避免这种情况。在Spark的声明之前,只需放置一条class Window;行:

class Window; 

class Spark { 
    Window *test; 
} 
+0

我应该包括这个,窗口是在另一个头文件中定义的,它已包含在内,我编辑了我的帖子以显示此内容。 – 2013-02-14 05:58:22

通常会出现此类错误,因为在您尝试使用它时没有在范围内声明Window

这可能是由许多问题引起的,其中之一可能是缺少的#include

你可以看到这个具有通过编译下面的代码(用g++)效果:

//typedef int xyzzy; 
int main(void) { 
    xyzzy plugh; 
    return 0; 
} 

的输出(注意最后一行):

prog.cpp: In function 'int main()': 
prog.cpp:3: error: 'xyzzy' was not declared in this scope 
prog.cpp:3: error: expected `;' before 'plugh' 

但是当,你取消了第一行的注释,它编译得很好。您需要在尝试使用它之前声明Window

如果您似乎指出,您相信您定义Window,您需要检查。这可能是因为你在#ifdef内部有一个不活动的声明,或者你的文件包含在一个循环中,以防止正确的声明顺序或任何数量的其他事情。