“构造函数中未定义的对行中vtable的引用”

时间:2013-04-23 21:09:44

标签: c++ inheritance vtable

我收到标题中声明的错误消息。我正在尝试构建一个继承了类Shape的类Line。

中出现错误
Shape(color) {}

在行构造函数中执行。

标题文件(形状和线条合二为一,颜色为另一种)

Shape.h:

#ifndef SHAPE
#define SHAPE

#include "Image.h"
class Shape{
private:
    Color color;
public:
    Shape (const Color & col) : color(col){}
    virtual void Draw(Image & figure) const = 0;

};

class Line : public Shape{
public:
    Line (int x1, int y1, int x2, int y2, const Color & color);
    virtual void Draw(Image & figure) const;

private:
    int x1, y1, x2, y2;
};
#endif // SHAPE

Image.h:

struct Color {
    Color( unsigned char r, unsigned char g, unsigned char b ) 
    : red( r ), green( g ),     blue( b ) {
    }
    Color() : red( 0 ), green( 0 ), blue( 0 ) {
    }
    unsigned char red, green, blue;
};

这是Shape.cpp

#include "Shape.h"

Line::Line( int x1, int y1, int x2, int y2, const Color &color )
    : x1( x1 )
    , x2( x2 )
    , y1( y1 )
    , y2( y2 )
    , Shape(color){
}

2 个答案:

答案 0 :(得分:0)

struct Color必须在被用作Shape的成员之前声明。

答案 1 :(得分:0)

似乎从Line类中的Draw声明中缩回“void”有效。出于某种原因