2010-02-17 116 views
1

你好。我正在为我的课程进行C++作业。我几乎完成了,但似乎无法找出这些错误:链接器错误 - 无法解析的外部符号

error LNK2001: unresolved external symbol "public: virtual void __thiscall HasQuarterState::dispense(void)const " ([email protected]@@UBEXXZ) gumball.obj Gumball 
error LNK2001: unresolved external symbol "public: virtual void __thiscall SoldState::turnCrank(void)const " ([email protected]@@UBEXXZ) gumball.obj Gumball 
fatal error LNK1120: 2 unresolved externals C:\School Work\CS 492\Gumball\Debug\Gumball.exe Gumball 

我去MSDN,抬头LNK2001错误,但提供信息的压倒性量,恐怕我就想不通考虑到我在使用C++方面的有限经验,看看MSDN页面时出了什么问题。

但我确实认为问题来自我构建程序的方式。我的老师说,如果我们也想使用一个.cpp文件,但我想最终我对Visual Studio/C++不太了解,无法完成这项工作。最终,我遇到了一些其他问题,我必须解决这个问题,它使用一个.cpp文件。

有问题的代码/文件是在这里:http://codepad.org/LpBeJT2Y

它是一个大的OLE混乱,但是这是我做了什么:

  • 声明名为GumballMachine(没有定义)类
  • 定义一个名为State的类(它又有一个指向GumballMachine的指针)
  • 定义了几个从状态继承的其他状态类
  • 定义类GumballMachine
  • 定义了从其他状态类的原始定义中排除的几个函数。这是因为这些函数依赖于GumbballMachine的定义函数,并且在GumballMachine函数被定义之前不会工作。
  • 无效的主要()

据我可以告诉(我有限的VS/C++的知识),代码看起来要被罚款。也许有更多经验的人会有所收获。任何关于如何解决这个问题的指针?

感谢您的帮助。

回答

1

您已经在HasQuarterState中声明了分配,但尚未定义它。该功能没有正文。同样在SoldState中使用turnCrank。

+0

我认为这样好吗?就像它应该什么都不做。我只包含它,因为如果我没有定义它,VS会给我错误。 – Chris 2010-02-17 04:30:54

+1

你必须声明它,因为SoldState是从State派生的。任何派生自State的事物必须实现它所定义的所有纯虚方法(virtual void foo()= 0)。 SoldState必须有一些实现才能运行。只是宣布与国家相同的方法是不够的。你也必须实现它们。 – 2010-02-17 04:35:39

+0

如果您想分配无所事事,请将“;”与“{}” - 这样既是一个声明,也是一个定义。 – 2010-02-17 04:37:09

0

在类SoldState中,turnCrank没有定义。改变这个:
void turnCrank()const;
To this:
void turnCrank()const {cout < <“some implementation”< < endl; }

对于其他功能类似。

相关问题