我应该把这些函数放在一个独立的.h文件中吗
Should I put these functions in a standalone .h file?
我有一个项目,它包括两个文件:main.cc和header1.h。当main.cc实例化一个类"className"并调用它的成员函数时,头文件包括该类的定义。
main.cc:
#include <header1.h>
int main(){
className classobject();
classobject.function1();
...
}
}
header1.h:
class className{
public:
className();
void function1();
...
};
double className::function1(){
double function2(){
...
}
}
有了这个,我遇到了一个错误,它说:"函数定义不应该放在‘{’标记之前
因此,我决定将function2的定义放在类之外,并将其放在一个独立的.h文件中。这样,我的项目将包括3个文件,即:main.cc、head1.h和function2.hfile:
main.cc:
#include <head1.h>
int main(){
className classobject;
void classobject.function1();
...
}
head1.h:
#include <function2.h>
class className{
double function2();
...
}
功能2.h:
double function2(){
...
}
虽然函数2也可以定义为类成员函数,这样它就可以在类内从函数1中移出,但我想知道上面提到的处理是否合法。此外,头文件的创建是否有一些由用法建立的隐含规则(常见处理)?
有人能评论一下吗?提前谢谢。
我看到的代码中的第一个问题是在头中定义了className::function1
,但忘记声明它为inline
。结果是,您只能在单个编译单元中使用标头†。这是个糟糕的设计。我建议在源文件中定义它。
其次,您尝试在另一个函数中定义function2
。这是不允许的,因此您出现了编译错误。你说你决定把它的定义移到类之外,但它的定义已经在类定义之外了。将定义移出className::function1
的定义确实是一个正确的选择。
如果function2
在className::function1
中的使用之外是可重用的,那么在单独的头中声明它确实是一个好主意,也是完全合法的。但就像className::function1
一样,您也在标头中一次又一次地定义function2
,而没有声明它为inline
,因此如果您试图在多个编译单元中使用它,您将遇到麻烦。我也建议在源文件中定义function2
。
†如果在多个编译单元中包含标头,那么这些编译单元中的每个都将包含函数的定义。一个定义规则不允许在多个编译单元中定义函数。对标记为inline
的函数进行不同的处理。它们可以在多个编译单元中定义,只要它们在每个编译单元中具有相同的定义即可。
在className.hpp
中执行类似操作
class className{
public:
className();
private:
void function1();
};
然后在您的className.cpp
中
#include"className.hpp"
className::className(){ /*defintion*/ }
void className::function1(){ /*definition*/ }
然后,您可以使用makefile来计算className.o
文件并将其链接到主文件。
如果您想定义另一个函数(如function2()
),则可以将其定义为className.cpp
- C 中是否有一个无法更改的时间戳?(Internet独立)
- 一个使用fortran/C/C++的独立软件
- 打开文本文件并读取一个带有空格的字符串,然后将两个独立的int放入一个结构中
- 为什么std::whatever::erase()是一个方法,std::remove()是独立函数
- 执行一个新的完全独立的进程,该进程封装在一个可执行文件中,而不需要为独立进程将文件写入磁盘
- 如何使用生成文件独立编译和更新一个文件夹中的所有文件
- 创建一个独立的gtkmm对话框
- 我应该把这些函数放在一个独立的.h文件中吗
- c++,类,向量,优化:多个独立向量vs一个类向量
- 一个应用程序实例,独立于平台,C++11
- 如何将两个独立的boost::bind()组合为一个boost::函数
- 我需要一个Windows 8 WinRT应用程序来与用C编写的独立应用程序通信
- 在一个独立的C++程序中编译用C++编写的Festival代码的部分
- 是否有一个易于使用的,独立于平台的包,我们可以用它来读取&在c++下编写gzip流
- 如何在c++中使用qmake构建一个独立的共享库
- 函数应该在两个类中的一个/两个中运行,还是独立运行?
- 如何将两个独立的c++文件合并到一个程序中
- 用c++插件为nodejs应用程序构建一个独立的可执行文件
- 使用cmake将第三方静态库组合成一个独立的静态库
- 懒惰的程序员将vbscript/hta文件包装在一个独立的静态链接的c++ exe中