我有一个名为“动物”的类,它是一个超级纯粹的多态。我有其他课程“狗”,“猫”,“仓鼠”等...都继承了“动物”类。
在一个程序中,我需要包括所有子类(狗,猫,仓鼠),但是,当我这样做时:
#include "Hamster.h"
#include "Dog.h"
...
...
我收到错误:
'class Animal'的先前定义
有没有办法阻止这种情况?
P.S。我考虑过做一个:
#ifdef
但是,如果使用了类,那么请包含它。例如。如果该程序试图煽动Cat类,则执行include。
很抱歉,如果没有解释清楚。
答案 0 :(得分:7)
在头文件中使用包含警戒:
#ifndef ANIMAL_H
#define ANIMAL_H
//definitions
#endif
答案 1 :(得分:5)
在每个标题的顶部,添加一个
#pragma once
国际标准只是说如果它不理解它,编译器必须忽略它。
但是nearly all compilers do understand it,这是事实上的标准。
#pragma
的替代方法是使用
#ifndef MYHEADER_H
#define MYHEADER_H
// Contents of header
#endif
更丑陋,更冗长,更容易纠正,可能因名称冲突而失败,效率低下,但完全是标准的。
无论如何,我们的想法是防止标题内容(如类定义)在相同的翻译单元中被包含两次或更多次。
但请注意,您可以在同一个翻译单元中执行相同的typedef
。
答案 2 :(得分:1)
您可以在标头文件中使用#pragma once
,但它不可移植为#ifndef
答案 3 :(得分:0)
在标头文件中使用#pragma once
。