我在哪里输入两个派生标头的基类标头?

问题描述 投票:0回答:2

[尝试阅读其他问题的答案,但没有一个对我有用。

//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基类包含文件的位置。尝试将其放入源中,并认为如果我将其放入第一行就可以了,不是。

试图将包含文件放入两个派生标头中,出现了与“已在Display.obj中定义”有关的另一个错误。

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

c++ header base-class
2个回答
1
投票

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

0
投票

查看错误发生的位置(//here is the error行),编译器在尝试编译Equipment时尚未“看到” Display.h类。您可以通过#include中的Equipment.h -ing Display.h解决此错误。

如其中一条注释中所述,应避免在代码中将#include -ing .cpp文件。源文件应先编译然后链接。

© www.soinside.com 2019 - 2024. All rights reserved.