C++错误的返回类型

C++ Bad return type?

本文关键字:返回类型 错误 C++      更新时间:2023-10-16

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

提前感谢您的帮助。

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

更新:在循环依赖关系的情况下,您可以以某种方式删除依赖关系,也可以使用前向声明来避免这种情况。只需在Spark的声明前放一行class Window;

class Window;
class Spark {
    Window *test;
}

这种错误通常会出现,因为在您尝试使用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中获得了声明,或者您将文件包含在一个循环中,从而阻止了正确的声明顺序或任何其他事情。