虚拟关键字和库

时间:2013-07-01 14:03:04

标签: c++ multithreading inheritance virtual libraries

像往常一样,提前感谢...

我有Base

中定义的班级Thing和班级base.lib

Base类有一个受保护的虚拟函数createThing(),正如您可能猜到的那样创建并返回Thing的实例

现在;我还有另一个项目,我们称之为“车库”。

在这个项目中,我有Garage课程(公开)来自Base。我还创建了源自Car

的类Thing

Garage中,我重写createThing()以返回Car的实例。

行。

这是复杂的地方。

在我的情况下,

Base实际上创建了一个工作线程(我已经尝试将线程主体作为Base的私有成员,作为单独类的成员)。

在该工作线程中,createThing()通过如下指针调用:

Thing* thing = base->createThing();

单独测试Base时哪个很好,很花哨。

但是,只要我创建一个新项目并链接到base.lib,按照描述创建我的GarageCar类,上面的行总是调用{{1}的构造函数绝对不是Thing

有人可以解释一下我做错了吗?

谢谢:)

编辑:在此示例中(以及在我的实际代码中),变量Car DEFINATLY指向base的实例

我刚试过的另一个测试,如果我将Garage(在堆栈上创建)转换为Garage指针,然后调用Base,它会按预期工作。

只有当我让工人线程调用base->createThing()时,我才会遇到此问题

1 个答案:

答案 0 :(得分:0)

我正在回答这个问题,因为我开始认为这是某种联系问题或无关的问题。所有评论都非常感谢,谢谢!!

编辑:完全删除项目并重新开始工作,我无法想象发布的是什么,但可能是VC ++中的一些奇怪的错误

全部谢谢!