C ++错误的返回类型?

时间:2013-02-14 05:55:19

标签: c++ return

我在Visual Studio中遇到两组错误,并带有以下类标题......

编辑:对不起,伙计们忘了表明我确实包含了Window。

#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挂在返回类型上,基本上没有得到它。但据我所知,我正确地构建了这些声明。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

通常会出现这种错误,因为在您尝试使用范围时,范围内没有声明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内部的声明处于非活动状态,或者您将文件包含在循环中以阻止正确的声明顺序或其他任何内容。

答案 1 :(得分:2)

在我看来好像类型Window未知。包括声明Window的头文件,并确保使用正确的命名空间或使用完全限定的类型名。

<强>更新 在循环依赖的情况下,您可以以某种方式删除依赖项或使用前向声明来避免这种情况。只需在Spark的声明之前放置class Window;行:

class Window;

class Spark {
    Window *test;
}