【问题标题】:Virtual function unresolved external error虚函数未解决的外部错误
【发布时间】:2014-01-23 16:34:33
【问题描述】:

MyTask.h

class MyTask
{
   virtual std::ostream& show(std::ostream &os) const ;
};

MyTask.cpp

std::ostream& MyTask::show(std::ostream &os) const
{
os << "Task(" << this->id << "):\t Processing time:" << this->p << "\t Weight:"<< this->w ;
return os;
}

当我在头文件中添加单词 virtual 时,出现未解决的外部链接错误。我检查了类似的问题,但问题是函数未定义或不是纯虚拟的。

编辑: 确切的错误是:

MiniOS.obj : error LNK2001: unresolved external symbol "public: virtual class std::basic_ostream<char,struct std::char_traits<char> > & __thiscall SimOS::MyTask::show(class std::basic_ostream<char,struct std::char_traits<char> > &)const " (?show@MyTask@SimOS@@UBEAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV34@@Z)

所以我认为问题出在其他地方,有什么想法吗?

【问题讨论】:

  • 错误的确切描述是什么?
  • 我添加了确切的描述,谢谢。
  • @YochaiTimmer 我这样做了,但它不起作用:(
  • 您是否包含 以获得std::ostream
  • @TonyTheLion 是的,当我删除“虚拟”时它可以工作!

标签: c++ oop visual-c++ visual-studio-2008


【解决方案1】:

问题是我将 MyTask.cpp 文件作为现有项目添加到项目中。而且由于 VS 不会将 MyTask.cpp 复制到当前项目,我不得不从项目中删除该文件,然后将其复制到当前项目并清理然后重建。 谢谢大家的帮助。

【讨论】:

  • 我不明白……如果不复制,Visual Studio就不会编译?
  • 不明白具体做了什么,但是在VS2008 Express版上试试
  • 所以你说它在没有virtual 的情况下编译,但随后你将文件复制到当前项目文件夹,奇迹般地,它工作了。你让我安装那个编译器来解释你的巫术:) ?
  • 由于它将文件保存在项目文件夹以外的另一个文件夹中,编译器可能没有看到虚函数的定义,这就是它假设它没有定义的原因,但我'不确定。是的,这是一个奇迹,你应该有兴趣亲自去看看 :)
  • 我用完整版的 Visual Studio 2008 做了一些测试。我不会安装 Express Edition,因为我不确定如何重新安装完整版。无论如何,你对问题的解释(不能用完整版重现)似乎太棒了,难以置信,我认为你应该被否决。
猜你喜欢
  • 2012-03-16
  • 2018-11-23
  • 2015-01-11
  • 2015-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2013-05-21
相关资源
最近更新 更多