如何修复vtable的未定义引用?

时间:2014-04-26 22:30:27

标签: c++ vtable

我见过很多有类似问题的人,但我见过的解决方案似乎没有解决我的问题,所以希望有人可以看到我的问题并解释如何解决它或者至少指示我某处可以解释它。

这是我的代码(至少是破坏的部分):

A.H

#ifndef A_H
#define A_H

enum myEnum {SOMEVALUE, OTHERVALUE};
class C;

class A
{
    public:
        virtual enum myEnum foo(C* c) = 0;
};

#endif // A_H

B.h

#include "A.h"

#ifndef B_H
#define B_H

class RuleConway : public A
{
    public:
        enum myEnum foo(C* c);
};

#endif // B_H

B.cpp

#include "B.h"
#include "C.h"

enum myEnum foo(C* c)
{
    // do things
    return SOMEVALUE;
}

当我尝试编译我的项目时,我明白了:

  

未定义引用'vtable for B'

有谁知道我为什么会收到此错误或如何修复错误?

2 个答案:

答案 0 :(得分:3)

您必须在B.cpp中将该函数实现为enum myEnum RuleConway::foo(C* c)。你现在的方式就是在B.cpp中定义一个名为foo的函数,而不是B的成员函数。

答案 1 :(得分:0)

B.cpp你应该做

enum myEnum RuleConway::foo(C* c)