C++ 返回函数中的结构会导致声明不兼容

C++ 返回函数中的结构会导致声明不兼容,c++,struct,C++,Struct,所以,我有两个文件interpreator.h和interpreator.cpp。 我希望有一个方法返回结构,但它总是说我不能转换为不完整的类或声明不兼容。 有人能帮我吗? 我将在这里输入一些代码: 解释器 #pragma once #include <iostream> #include "calc3.h" class interpretor { public: interpretor(nodeType* STprogram); private:

所以,我有两个文件interpreator.h和interpreator.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();
};
结构returner在类解释程序中声明,因此类的名称应该添加到成员函数定义中的类{}和{}之外

struct interpretor::returner interpretor::test() {
    returner p;
    return p;
}
结构returner在类解释程序中声明,因此类的名称应该添加到成员函数定义中的类{}和{}之外

struct interpretor::returner interpretor::test() {
    returner p;
    return p;
}
该错误来自未找到新的正向声明类型时声明该类型的struct returner。在您的情况下,找不到该类型,因此它会创建一个新的类型,因此会出现不兼容的声明错误。如果在返回程序前面删除结构,则会显示一个更有用的错误:

或者,您可以使用尾随返回类型,这使编译器更容易找到名称:

auto interpretor::test() -> returner {
    returner p;
    return p;
}
该错误来自未找到新的正向声明类型时声明该类型的struct returner。在您的情况下,找不到该类型,因此它会创建一个新的类型,因此会出现不兼容的声明错误。如果在返回程序前面删除结构,则会显示一个更有用的错误:

或者,您可以使用尾随返回类型,这使编译器更容易找到名称:

auto interpretor::test() -> returner {
    returner p;
    return p;
}

非常感谢,它帮了很多忙!现在我想这是有效的:非常感谢,它帮助了很多!现在我想这是有效的:非常感谢,它帮助了很多!现在我想这是有效的:非常感谢,它帮助了很多!现在我认为这是可行的:我编辑了问题和标题,使问题对未来的读者更清楚。如果您不同意某些更改,请随时回滚它们!我编辑了这个问题和标题,以便将来的读者能更清楚地了解这个问题。如果您不同意某些更改,请随时回滚它们!
auto interpretor::test() -> returner {
    returner p;
    return p;
}