我在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挂在返回类型上,基本上没有得到它。但据我所知,我正确地构建了这些声明。
提前感谢您的帮助。
答案 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;
}