0

我在 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 我试图创建一个指针,该指针将在创建该对象后设置为 window 对象(因此我使用的原因是指针)。

在四处寻找并盯着它看了一会儿之后,我看不出这两行有什么问题。看起来 VS 挂断了返回类型,并且基本上没有得到它。然而据我所知,我正确地构建了这些声明。

在此先感谢您的帮助。

4

2 回答 2

2

通常会出现这种错误,因为Window在您尝试使用它时没有声明 in scope。

这可能是由许多问题引起的,其中一个可能是缺少#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处于未激活状态,或者您将文件包含在阻止正确声明顺序或任何其他事情的循环中。

于 2013-02-14T05:57:01.943 回答
2

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

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

class Window;

class Spark {
    Window *test;
}
于 2013-02-14T05:57:06.673 回答