C++ 在两个不同的CPP文件中使用相同的函数。我如何做到这一点?

C++ 在两个不同的CPP文件中使用相同的函数。我如何做到这一点?,c++,header-files,C++,Header Files,对于我的家庭作业,这是我的作业: 创建5个文件。Driver.cpp,f.h,f.cpp,g.h,g.cpp。f和g应该实现一个名为hello的函数。司机应该 从f和g打电话给你好 示例输出: 你好,f g你好 按任意键继续 我创建了所有这些文件,但我不明白的是,同一个函数hello()如何存在于两个文件中,并从driver.cpp文件调用?任何帮助都将不胜感激 编辑:我得到的错误是“致命错误LNK1169:找到一个或多个乘法定义符号”。这是指两个hello()函数。如何解决此问题?全局可见实体

对于我的家庭作业,这是我的作业:

创建5个文件。Driver.cpp,f.h,f.cpp,g.h,g.cpp。f和g应该实现一个名为hello的函数。司机应该 从f和g打电话给你好

示例输出:

你好,f

g你好

按任意键继续

我创建了所有这些文件,但我不明白的是,同一个函数hello()如何存在于两个文件中,并从driver.cpp文件调用?任何帮助都将不胜感激


编辑:我得到的错误是“致命错误LNK1169:找到一个或多个乘法定义符号”。这是指两个hello()函数。如何解决此问题?

全局可见实体只允许有一个定义。因此,不能在多个翻译单元中定义相同的函数
hello()
。有几种不同的方法可以多次定义相同名称的函数:

  • 重载函数可以有相同的名称,只要它们的参数在某种程度上不同。例如,您可以让每个
    hello()
    函数接受不同版本之间不同的参数(注意:我不建议使用这种方法)。例如:

    void hello(bool) { std::cout << "hello(bool)\n"; }
    void hello(int)  { std::cout << "hello(int)\n"; }
    
    // file a.cpp
    static void hello() { std::cout << "a.cpp:hello()\n"; }
    void a() { hello(); }
    
    // file b.cpp
    static void hello() { std::cout << "b.cpp:hello()\n"; }
    void b() { hello(); }
    
  • 我不知道你教的是哪一个版本。不过,每一种都有其用途,了解不同的变体是很有用的


    如果有人声称为了完整性,我应该包括
    virtual
    函数:请注意,重写函数实际上也会创建重载(基中的
    virtual
    函数和重写函数在传递的隐式对象上有所不同),即。,已经介绍了
    虚拟
    函数的使用。

    您应该使用名称空间:

    f.h

    :

    f.cpp中

    void mynamespace::hello()
    {
        /... function definition here
    }
    
    main()中


    对于名称空间的良好介绍 hello(int)< /> >和<代码> hello(char)< />。这似乎很愚蠢,但可能足以胜任一项任务。@Anatolig这是一种糟糕的做法。这里应该使用名称空间。
    namespace mynamespace {
      void hello(); 
    }
    
    void mynamespace::hello()
    {
        /... function definition here
    }
    
    int main()
    {
       mynamespace :: hello();   // calls hello defined in f.cpp
    }