因此,我有两个文件interpretor.hinterpretor.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;
}

09-30 13:59