编辑:正如 DyP 在下面的评论中指出的那样,这只是 c3(SoccerWorld) 中函数定义中的一个错字。
- 我有一个类,比如说
c1
,它有一个虚函数,f
。 - 另一个类
c2
继承自c1
,另一个c3
继承自c2
。 c2
没有虚拟功能f
,但我想c3
通过一些更改添加它。- 中的虚函数不是纯函数
f
,而是在. 我仍然需要在,以及。c1
c1.cpp
f
c1
添加f
到c3
和 notc2
时,我得到一个未解决的外部符号错误。如果我也将f
to添加c2
为虚拟函数,则会收到两个错误:一个与以前相同,c1.obj
另一个f
在c3
.
这就是c1
, c2
,c3
的样子:
class C1 {
virtual void f() { ... }
};
class C2 : public C1 {
//No virtual f
};
class C3 : public C2 {
virtual void f() { /*Do something*/ }
};
实 f 函数:
AbstractKart *World::createKart(const std::string &kart_ident, int index, int local_player_id, int global_player_id, RaceManager::KartType kart_type)
{ ... }
这是在课堂上的世界。WorldWithRank 类继承自 World,并且没有 createKart 函数。类 SoccerWorld 继承自 WorldWithRank 并且我希望它具有 createKart 以便在它是 SoccerWorld 时以不同的方式放置卡丁车。
createKart 在 World 中受到保护。
错误:
world.obj : error LNK2005: "protected: virtual class AbstractKart * __thiscall World::createKart(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,int,int,enum RaceManager::KartType)" (?createKart@World@@MAEPAVAbstractKart@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HHHW4KartType@RaceManager@@@Z) already defined in soccer_world.obj
soccer_world.obj : error LNK2001: unresolved external symbol "protected: virtual class AbstractKart * __thiscall SoccerWorld::createKart(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int,int,int,enum RaceManager::KartType)" (?createKart@SoccerWorld@@MAEPAVAbstractKart@@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@HHHW4KartType@RaceManager@@@Z)