【发布时间】:2020-05-14 16:16:51
【问题描述】:
我遇到了一些问题,即函数没有返回正确的类型,因为没有定义一个类。我正在使用工厂模式。
我收到的两条错误消息是:
'return': 无法从 'DLA *' 转换为 'Layer *'
和:
'Layer':基类未定义(编译源文件src\Layer.cpp)
对于包含Layer.h 的每个文件都会重复同样的错误消息。
这是我继承自 Layer 的类的样子 (DLA.h):
#pragma once
#ifndef _DLA
#define _DLA
#include "ofMain.h"
#include "ofxGui.h"
#include "Layer.h"
class DLA: public Layer
{
public:
DLA();
void setup();
void update();
void draw();
private:
};
#endif
这是我的Layer 类标题(Layer.h):
#pragma once
#ifndef _LAYER
#define _LAYER
#include "ofMain.h"
#include "ofxGui.h"
#include "DLA.h"
enum SceneType
{
Scene_None,
Scene_Default,
Scene_DLA,
};
class Layer
{
public:
void setup();
void update();
void draw();
static Layer *CreateSimulation(SceneType Type);
private:
};
#endif
失败的函数是这个,位于Layer.cpp:
Layer *Layer::CreateSimulation(SceneType Type)
{
switch (Type)
{
case Scene_None:
default:
return nullptr;
case Scene_DLA:
return new DLA();
}
}
我已经尝试了在 Stack Overflow 上找到的与我有类似问题的所有内容,但我看到有些人建议使用非常微妙的代码缩进来解决这个问题,所以我真的很想知道问题出在哪里。
【问题讨论】:
-
由于编译错误消息的字符串很长,通常不值得您花时间解决除第一个错误之外的任何错误。以下许多错误是由第一个错误引起的,一旦解决,就会消失(或改变)。基于此 - 您的编译错误链中的第一个错误是什么,正如您的编译器输出它(逐字)?
-
你应该从
Layer.h中删除#include "DLA.h"。 -
“Layer.cpp”中是否包含“Layer.h”?
-
可能不会咬你,但当它滥用下划线时会产生非常奇怪的,几乎难以理解的结果。请阅读What are the rules about using an underscore in a C++ identifier? 了解详情。
-
我需要Layer.h 中的
#include "DLA.h",因为我在帖子末尾提到的Layer *Layer::CreateSimulation(SceneType Type)函数需要创建一个DLA 对象。我在原始帖子中添加了带有错误消息的图像,是的,我确实在 Layer.cpp 中包含了 Layer.h
标签: c++ class oop inheritance factory