我在哪里输入两个派生 header 的基础 class header?

Where do I input the base class header for two derived headers?

尝试阅读其他问题的答案,但 none 为我做了。

//Equipment.h
#pragma once
class Equipment {
//...
};
//Display.h
#pragma once
class Display :public Equipment { //here is the error
public:
    Display(int id, int price, int year);
};
//Display.cpp
#pragma once
#include "Display.h"
#include "Equipment.h"
Display::Display(int id=0, int price=0, int year=0) {
    int arr[3 + 1] = { id, price, year };
    //Equipment(int id, int price, int year);
}
//Printer.h and .cpp are very similar
//in composition to Display.h and .cpp
//error is in a similar position too
//source.cpp
#include<iostream>
using namespace std;

#include "Printer.cpp"
#include "Display.cpp"

我真的不知道在哪里放置 Equipment.h 基础 class 包含文件。试过把它放在源代码中,我认为如果我先把它放在源代码中它会起作用,不。

尝试将包含文件放入两个派生的 header 中,出现了与 "already defined in Display.obj" 有关的不同错误。

header 和 cpp 文件都必须存在,我不知道应该如何放置包含文件。

Equipment.h

#pragma once
class Equipment {
    //,,,
};

Display.h

#pragma once
#include "Equipment.h"
class Display :public Equipment {
public:
    Display(int id, int price, int year);
};

Printer.h

#pragma once
#include "Equipment.h"
class Printer : public Equipment {
    Printer();
};

Display.cpp

#include "Display.h"
Display::Display(int id=0, int price=0, int year=0) {
    int arr[3 + 1] = { id, price, year };
    //Equipment(int id, int price, int year);
}

Printer.cpp

#include "Printer.h"
Printer::Printer() {
    //...
}

source.cpp

#include "Printer.h"
#include "Display.h"
#include<iostream>
using namespace std;

//use Printer and Display

查看错误发生的位置(带有 //here is the error 的行),编译器在尝试编译 Display.h。您可以通过 #include-ing Equipment.h in Display.h.

来解决此错误

如评论之一所述,您应该避免在代码中使用 #include-ing .cpp 文件。应编译源文件然后链接。