因此,我有两个文件interpretor.h
和interpretor.cpp
。
我想有一个返回结构的方法,但总是说我无法转换为不完整的类或声明不兼容。
有人可以帮我吗?
我将在此处放置一些代码:
解释器
#pragma once
#include <iostream>
#include "calc3.h"
class interpretor
{
public:
interpretor(nodeType* STprogram);
private:
/* for passing informations */
struct returner {
union
{
int integer;
float real;
};
int type;
};
struct returner test();
};
和解释器.cpp#include "interpretor.h"
// ...
struct returner interpretor::test() {
returner p;
return p;
}
最佳答案
错误来自struct returner
,它在找不到新的前向声明类型时声明了它。在您的情况下,找不到该类型,因此它将创建一个新的类型,因此出现不兼容的声明错误。如果将struct
放在returner
前面,它将显示一个更有用的错误:
使用类的成员类型时,必须使用该类型的限定名称:
interpretor::returner interpretor::test() {
returner p;
return p;
}
另外,您可以使用尾随返回类型,这使编译器更容易找到名称:auto interpretor::test() -> returner {
returner p;
return p;
}