覆盖函数导致多个定义错误

Posted

技术标签:

【中文标题】覆盖函数导致多个定义错误【英文标题】:Overriding Functions result in multiple definitions error 【发布时间】:2020-02-28 20:43:36 【问题描述】:

我正在尝试设置一个 Employee 基本案例和一个 Hourly/Salied/Commissioned Employee 子类。当我尝试编译时,出现以下错误:

HourlyEmployee.o: In function `getInfo()':
/cygdrive/d/HourlyEmployee.cpp:4: multiple definition of `func1()'
Employee.o:/cygdrive/d/subclass.cpp:4: first defined here
HourlyEmployee.o: In function `getEarning()':
/cygdrive/d/HourlyEmployee.cpp:9: multiple definition of `func2()'
Employee.o:/cygdrive/subclass.cpp:9: first defined here

下面是我的代码,它非常简单,因为我只是试图设置函数的继承/覆盖。

子类.cpp

#include "subclass.h"

string func1(/* arguments */) 
  /* code */
  return 0;


double func2(/* arguments */) 
  /* code */
  return 0;


我在这里缺少什么?

【问题讨论】:

您在函数定义之前缺少 classname::。又名 HourlyEmployee::getInfo 【参考方案1】:

定义成员函数时,必须使用ClassName:: 表示法,即

#include "HourlyEmployee.h"

string HourlyEmployee::getInfo(/* arguments */) 
  /* code */
  return 0;


double HourlyEmployee::getEarning(/* arguments */) 
  /* code */
  return 0;

【讨论】:

成功了,谢谢!是否有可能在某些情况下不需要?具有相同项目的另一个人没有使用 ClassName:: 表示法,但他们的文件编译得很好。 仅当您在类声明中定义时,例如class myClass: int GetInt() return 1;;,如果您在类声明之外并且不使用myClass::,您只是在定义与任何类无关的函数

以上是关于覆盖函数导致多个定义错误的主要内容,如果未能解决你的问题,请参考以下文章

无故定义多个析构函数

java类内多个函数如何同步

Swift init 方法错误:声明 'init(coder:)' 不能覆盖多个超类声明

发出多个 Axios 请求导致 CORS 错误

命名空间模式导致 JSLint '函数在定义之前被使用' 错误

使用自定义覆盖从 plist 加载多个注释