首页 > 解决方案 > 来自不同文件的类,变量声明不起作用“不允许不完整的类型”

问题描述

我有一个这样的文件:

#include <list>
#include "term.h"

class Term {

};

class Number : public Term {
private:
    double m_number;

    Term* m_exponent = nullptr;

public:
    Number(double number) {
        m_number = number;
    }

    Number(double number, Term* exponent) {
        m_number = number;
        m_exponent = exponent;
    }

    double getNumber() {
        return m_number;
    }

    void setExponent(Term* exponent) {
        m_exponent = exponent;
    }

    Term* getExponent() {
        return m_exponent;
    }
};

和一个像这样的头文件 term.h :

#pragma once

class Term;

class Number;

现在在我的主函数中,如果我尝试声明一个数字类型的变量(数字 a(10.0)),我会收到以下错误:不允许不完整类型。

#include "term.h"

int main() {
   Number a(10.0);
}

我不明白这是从哪里来的。任何帮助,将不胜感激。提前致谢!:)

标签: c++filetypesheader

解决方案


好的,快速教程。

C++ 将类的定义和实现的概念分开。这使得它与 Java 等语言不同。现在,如果需要,您可以在定义中内联类的部分内容,但您不必这样做。

您的 .h 文件应包含以下内容:

class Foo { ... 完整定义 };

然后在你的 .cpp 中,实现你在 .h 中没有做的任何事情:

无效 Foo::someMethod() { ... }

发生的事情是您的 main.cpp 完全不知道 Number 类是什么。它知道这是一个类,但仅此而已。它需要知道。

基本上,第一个片段中的所有内容都需要出现在 .h 文件中,以便其他 .cpp 文件可以看到它是什么。


推荐阅读