1

我有一个类A,两个类,BC,继承自A.

除了来自 的方法之外A,每个类都提供不同的东西,因此,我想将它们放在两个不同的文件中——b.hpp而且c.hpp,因为它们是具有内联函数的模板。

我也有一个 class User,同时使用BCclasses。在user.cpp,我应该有一些接近:

# include "b.hpp"
# include "c.hpp"

class User{
    ...;
};

这会引发编译器重新定义错误,因为我同时保留了类BC.bc.hpp

除了编程错误之外,这里的担忧是相当美观的:我只是觉得在小型应用程序中使用指令不是很优雅ifdef / ifndef——在我看来,它们总是像 IDE 的解决方案一样,用于管理太多模块的人,甚至不知道指令。

是否有任何(甚至是非标准的,但至少是理智的)解决方法,或者我是否必须坚持在同一个文件中有两个不同的类并使用ifdef / ifndef

4

3 回答 3

2

如果你的意思是在头文件中,不,没有一种好的、可移植的方式来做到这一点。将所有头文件保存为以下格式是标准的 -

#ifndef MYHEADER_HPP
#define MYHEADER_HPP

// ... content

#endif

任何其他方式都是非标准的,而不是真正的C++。

于 2013-02-26T04:44:07.407 回答
2

您可以随时使用#pragma once.

于 2013-02-26T04:44:57.740 回答
1

ifndef真的是很好的做法。它们帮助您使您的文件标题自包含

您不希望某个文件A停止编译,因为您在另一个文件的某处删除了一条include语句。因此,就此而言,您同时包含和。也许包括,但没关系。否则,无论何时从.CBCABABinclude CBinclude CA

所以ifndef确实是好的做法,应该使用。根据您的编译器,您可能有诸如pragma once之类的语法快捷方式(在此处找到讨论) - 但请记住,即使大多数编译器都支持它也不是标准的。

顺便说一句,专业生产代码确实使用ifndef警卫。

于 2013-02-26T04:47:37.617 回答