gpt4 book ai didi

c++ - 将虚函数添加到子类而不在子类中?

转载 作者:行者123 更新时间:2023-11-27 23:14:13 24 4
gpt4 key购买 nike

编辑:正如 DyP 在下面的评论中指出的那样,这只是 c3(SoccerWorld) 中函数定义中的错字。

  • 我有一个类,比如 c1,它有一个虚函数 f
  • 另一个类c2继承自c1,另一个c3继承自c2
  • c2 没有虚函数 f,但我想将它添加到 c3 并进行一些更改。
  • c1 中的虚函数f 不是纯虚函数,而是在c1.cpp 中定义的。我还需要 fc1 中。

f 添加到 c3 而不是 c2 时,出现未解析的外部符号错误。如果我也将 f 作为虚函数添加到 c2 中,我会得到两个错误:一个与以前相同,另一个在 c1.obj 表示 f 已经存在于 c3 中。

这就是c1c2c3的样子:

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)
{ ... }

这是在 World 类中。 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)

最佳答案

转自对 OP 的评论:

从你的错误中猜测,我认为你宁愿打错字。看起来在 soccer_world.cpp 中,您定义了一个函数 AbstractKart *World::createKart(...) 而不是 AbstractKart *SoccerWorld::createKart(。 ..).

这创建了 AbstractKart *World::createKart(...) 的第二个定义,它解释了第一个错误:

world.obj : error LNK2005: "protected: virtual class AbstractKart * __thiscall World::createKart([...])" [...] already defined in soccer_world.obj

如果您尝试调用未定义的 AbstractKart *SoccerWorld::createKart(...),则会发生第二个错误:

soccer_world.obj : error LNK2001: unresolved external symbol "protected: virtual class AbstractKart * __thiscall SoccerWorld::createKart([...])" [...]

关于c++ - 将虚函数添加到子类而不在子类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17775402/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com