我应该将这些函数放在一个独立的 .h 文件中吗?

Should I put these functions in a standalone .h file?

我有一个包含 2 个文件的项目:main.ccheader1.h。当 main.cc 实例化一个 class "className" 并调用它的成员函数时,头文件包含 class.

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的定义放在class外面,单独放在.h[=43=里面] 文件。这样,我的项目将包含 3 个文件,即:main.cchead1.h function2.h 文件:

main.cc:

#include <head1.h>
int main(){
className classobject;
void classobject.function1();
...
}

head1.h:

#include <function2.h>
class className{
double function2();
...
}

function2.h:

double function2(){
...
}

虽然function2也可以定义为class的成员函数,这样在class里面就可以移出function1了,我想知道上面的处理是否合法。另外,头文件的创建是否有一些隐含的规则,由使用(共同处理)建立?

谁能给点意见?提前致谢。

在你的className.hpp

中做这样的事情
class className{
   public:
        className();
   private:
       void function1();
};

然后在你的className.cpp

#include"className.hpp"

className::className(){ /*defintion*/ }

void className::function1(){ /*definition*/ }

然后您可以在 oder 中使用 makefile 来计算 className.o 文件并 link 它到主文件。

如果你想定义另一个函数(比如function2()),你可以定义它className.cpp

我在您的代码中看到的第一个问题是您在 header 中定义了 className::function1,但忘记声明它 inline。结果是您只能在单个编译单元 中使用 header。这是一个糟糕的设计。我建议改为在源文件中定义它。

其次,您尝试在另一个函数中定义 function2。这是不允许的,因此您遇到了编译错误。您说您决定将它的定义移到 class 之外,但它的定义已经在 class 定义之外。将定义移到 className::function1 的定义之外确实是一个正确的选择。

如果 function2className::function1 中的使用之外是可重复使用的,那么在单独的 header 中声明它确实是一个好主意并且完全合法。但是就像 className::function1 一样,您也在 header 中一次又一次地定义 function2 而没有声明它 inline,因此如果您尝试使用它就会遇到麻烦在多个编译单元中。我建议也在源文件中定义 function2

如果在多个编译单元中包含 header,那么每个编译单元都将包含函数的定义。 一个定义规则 不允许在多个编译单元中定义一个函数。标记为 inline 的函数被区别对待。它们可以在多个编译单元中定义,只要它们在每个编译单元中具有相同的定义即可。