难道ave函数没有被重定义,如何解决?

为什么这里没有发生重定义

这是main.cpp文件

```c++
#include
#include "e.h"
int ave()
{
    return 0;
}
int main()
{
    std::cout << ave();
    system("pause");
    return 0;
}


//这是e.h
 int ave();
//这是e.cpp
```c++
#include"m.h"
int ave()
{
    return 1;
}

难道ave函数没有被重定义?

该回答引用GPTᴼᴾᴱᴺᴬᴵ
在你的示例中,没有发生重定义,因为你在 main.cpp 中定义的 ave() 函数与 e.cpp 中定义的 ave() 函数是两个不同的函数。在 C++ 中,每个函数都有其自己的作用域(scope),函数名只在其定义所在的作用域内具有唯一性。因此,如果你在不同的文件中定义了同名的函数,它们不会互相干扰,也不会发生重定义错误。
·
如果你将 int ave() 的定义移动到 e.h 中并将其包含在 main.cpp 和 e.cpp 中,则会出现重定义错误。因为这会使得 ave() 的定义在 main.cpp 和 e.cpp 中都可见,从而引发重定义错误。