gpt4 book ai didi

c++ - 两个不同的 CPP 文件中的相同功能。我该如何做到这一点?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:10 31 4
gpt4 key购买 nike

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

创建 5 个文件。 Driver.cpp、f.h、f.cpp、g.h、g.cpp。 f 和 g 应该实现一个名为 hello 的函数。司机应从 f 和 g 打招呼。

示例输出:

你好

你好

按任意键继续。 . .

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

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

最佳答案

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

  1. 重载函数可以具有相同的名称,只要它们的参数在某些方面有所不同即可。例如,您可以让每个 hello() 函数接受一个在不同版本之间不同的参数(注意:我并不是在建议这种方法)。例如:

    void hello(bool) { std::cout << "hello(bool)\n"; }
    void hello(int) { std::cout << "hello(int)\n"; }
  2. 您可以在不同的命名空间中定义名称。这使得完全限定名称实际上不同,即通过使用不同的范围来防止冲突,例如:

    namespace a { void hello() { std::cout << "a::hello()\n"; }
    namespace b { void hello() { std::cout << "b::hello()\n"; }
  3. 假设您从本地文件中的函数调用您的函数,您可以使用 static 关键字将该函数从全局可见变为仅局部可见。具有本地可见性的功能在不同的翻译单元之间不会发生冲突。例如:

    // 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 函数在基础和覆盖函数在隐式传递的对象中有所不同),即,已经涵盖了虚拟函数的使用。

关于c++ - 两个不同的 CPP 文件中的相同功能。我该如何做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19610425/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com