- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
对于我的家庭作业,这是我的作业:
创建 5 个文件。 Driver.cpp、f.h、f.cpp、g.h、g.cpp。 f 和 g 应该实现一个名为 hello 的函数。司机应从 f 和 g 打招呼。
示例输出:
你好
你好
按任意键继续。 . .
我创建了所有这些文件,但我不明白的是同一个函数 hello() 怎么会存在于两个文件中并从 driver.cpp 文件中调用?任何帮助将不胜感激!
编辑:我得到的错误是“ fatal error LNK1169:找到一个或多个多重定义的符号”。这是指两个 hello() 函数。我该如何解决这个问题?
最佳答案
全局可见的实体只能有一个定义。因此,您不能在多个翻译单元中定义相同的函数 hello()
。有几种不同的方法可以多次定义同名函数:
重载函数可以具有相同的名称,只要它们的参数在某些方面有所不同即可。例如,您可以让每个 hello()
函数接受一个在不同版本之间不同的参数(注意:我并不是在建议这种方法)。例如:
void hello(bool) { std::cout << "hello(bool)\n"; }
void hello(int) { std::cout << "hello(int)\n"; }
您可以在不同的命名空间中定义名称。这使得完全限定名称实际上不同,即通过使用不同的范围来防止冲突,例如:
namespace a { void hello() { std::cout << "a::hello()\n"; }
namespace b { void hello() { std::cout << "b::hello()\n"; }
假设您从本地文件中的函数调用您的函数,您可以使用 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/
我是一名优秀的程序员,十分优秀!