C++错误的返回类型
C++ Bad return type?
我在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
中获得了声明,或者您将文件包含在一个循环中,从而阻止了正确的声明顺序或任何其他事情。
相关文章:
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- C++中函数的向量返回类型引发错误
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 返回派生类型时出现协变类型错误
- 使用typedef'ed返回类型声明友元函数时出现编译器错误
- 错误:为"运算符 std::string {aka std::__cxx11::basic_string}"指定的返回类型<char>
- 尝试使用具有尾随返回类型的 lambda 进行 SFINAE 时出现硬错误
- 错误:控制到达非空函数的末尾 [-Werror=返回类型] } ^
- 尾随返回类型中带有 SFINAE 的 GCC 错误
- 返回类型布尔函数中的声明语法错误
- 当我返回节点*时,C++中出现未知类型错误
- C++:在原型中声明"auto"函数返回类型仍然会导致在扣除错误之前使用"auto&quo
- 带有返回类型的错误调用模板到会员函数
- C 函数返回类型错误
- 无效的协变返回类型错误
- 嵌套迭代器和接口中的"无效协变返回类型"错误
- 嵌套类中的"无效协变返回类型"错误,该方法返回基于模板的对象
- 方法的C++继承,但返回类型错误(自动转换?typeid(*this)?)
- clang++为模板化类中模板化方法的特化自动返回类型错误