我有5个文件,一个主文件和两个带有两个头文件的类:
文件main.cpp:
#include "parent.hpp"
#include <iostream>
int main (){
Parent parentInstance;
parentInstance.function();
return 0;
}
文件parent.hpp:
class Parent {
public:
void function();
};
文件parent.cpp:
#include "child1.hpp"
void Parent::function() {
Child1 Child1Instance;
Child1Instance.speak();
}
file child1.hpp:
#include "parent.hpp"
#include <iostream>
class Child1 : public Parent {
public:
void speak();
};
file child1.cpp:
#include "child1.hpp"
void Child1::speak () {
std::cout << "Hi, I'm child1" << '\n';
}
它编译和工作没有任何问题,尽管它可能是通过不良做法完成的。当我尝试添加一个带有自己的cpp和hpp文件的新类时,问题就出现了,这个文件名为Child2,它的代码与Child1基本相同,但我不知道如何正确组织标题以使这段代码有效:
void Parent::function() {
Child1 Child1Instance;
Child2 Child2Instance;
Child1Instance.speak();
Child2Instance.speak();
}
然后回复我:
Hi, I'm child1
Hi, I'm child2
答案 0 :(得分:2)
一些规则:
#pragma once
)。.cpp
都包含相应的.hpp
作为其第一条(非评论)行。.cpp
明确用于.cpp
。这可以解决你的大部分问题。
一些解释:
a.h
和b.h
,但b.h
已包含a.h
...导致一些令人困惑的重新定义错误。.cpp
中的函数 definitions 对应.hpp
中的声明。把它放在第一行就是很好的做法。#include
,请准确包含您使用的内容,以避免混淆错误。答案 1 :(得分:0)
我非常感谢这些评论,我的所有知识都是自学成才......现在问题很容易解决:
main.cpp没有变化。
文件parent.hpp:
#ifndef _PARENT_HPP_
#define _PARENT_HPP_
class Parent {
public:
void function();
};
#endif /* _PARENT_HPP_ */
文件parent.cpp:
#include "parent.hpp"
#include "child1.hpp"
#include "child2.hpp"
void Parent::function() {
Child1 Child1Instance;
Child2 Child2Instance;
Child1Instance.speak();
Child2Instance.speak();
}
文件child1.hpp和child2.hpp(更改1到2):
#include "parent.hpp"
#include <iostream>
class Child1 : public Parent {
public:
void speak();
};
文件child1.cpp和child2.cpp(更改1到2):
#include "child1.hpp"
void Child1::speak () {
std::cout << "Hi, I'm child1" << '\n';
}
结果:
Hi, I'm child1
Hi, I'm child2
有效。但是,我想知道是否有任何可以改进的事情或可以纠正的错误。