如何停止重新定义一个类

时间:2012-10-29 14:45:03

标签: c++

我有一个名为“动物”的类,它是一个超级纯粹的多态。我有其他课程“狗”,“猫”,“仓鼠”等...都继承了“动物”类。

在一个程序中,我需要包括所有子类(狗,猫,仓鼠),但是,当我这样做时:

#include "Hamster.h"
#include "Dog.h"
...
...

我收到错误:

  

'class Animal'的先前定义

有没有办法阻止这种情况?

P.S。我考虑过做一个:

#ifdef

但是,如果使用了类,那么请包含它。例如。如果该程序试图煽动Cat类,则执行include。

很抱歉,如果没有解释清楚。

4 个答案:

答案 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