C++ 在两个不同的CPP文件中使用相同的函数。我如何做到这一点?
对于我的家庭作业,这是我的作业: 创建5个文件。Driver.cpp,f.h,f.cpp,g.h,g.cpp。f和g应该实现一个名为hello的函数。司机应该 从f和g打电话给你好 示例输出: 你好,f g你好 按任意键继续 我创建了所有这些文件,但我不明白的是,同一个函数hello()如何存在于两个文件中,并从driver.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()函数。如何解决此问题?全局可见实体
编辑:我得到的错误是“致命错误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()中
对于名称空间的良好介绍你学习过命名空间了吗?我们已经接触过它们了,但是我对它们不太熟悉。C++有重载:你可以有2个不同的函数:代码> 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
}