gpt4 book ai didi

c++ - 实现虚函数时未定义对 vtable 的引用

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:00:34 25 4
gpt4 key购买 nike

<分区>

我尝试实现 Jesse Liberty 和 Tim Keogh 编写的“C++ 编程入门”示例,但实现纯虚函数是编译而不是构建。它给出了错误:未定义对“vtable for circle”的引用

我尝试用变量 itsRadius 替换虚函数 GetItsRadius 以查看它是否可行,但它开始在 switch 语句中给我同样的错误,但对于 RectangleSquare 以及 circle 之前的错误。

代码如下:

#include <iostream>

using namespace std;

enum BOOL { FALSE, TRUE };

class Shape
{
public:
Shape(){}
~Shape(){}
virtual long GetArea() = 0; // error
virtual long GetPerim()= 0;
virtual void Draw() = 0;
private:
};

void Shape::Draw()
{
cout << "Abstract drawing mechanism!\n";
}

class Circle : public Shape
{
public:
Circle(int radius):itsRadius(radius){}
~Circle(){}
long GetArea() { return 3 * itsRadius * itsRadius; }
long GetPerim() { return 9 * itsRadius; }
void Draw();
private:
int itsRadius;
int itsCircumference;
};

class Rectangle : public Shape
{
public:
Rectangle(int len, int width):
itsLength(len), itsWidth(width){}
~Rectangle(){}
long GetArea() { return itsLength * itsWidth; }
long GetPerim() { return 2*itsLength + 2*itsWidth; }
virtual int GetLength() { itsLength; }
virtual int GetWidth() { itsWidth; }
void Draw();
private:
int itsWidth;
int itsLength;
};

void Rectangle::Draw()
{
for (int i = 0; i<itsLength; i++)
{
for (int j = 0; j<itsWidth; j++)
cout << "x ";

cout << "\n";
}
Shape::Draw();
}

class Square : public Rectangle
{
public:
Square(int len);
Square(int len, int width);
~Square(){}
long GetPerim() {return 4 * GetLength();}
};

Square::Square(int len):
Rectangle(len,len)
{}

Square::Square(int len, int width):
Rectangle(len,width)
{
if (GetLength() != GetWidth())
cout << "Error, not a square... a Rectangle??\n";
}

void startof()
{
int choice;
BOOL fQuit = FALSE;
Shape * sp;

while (1)
{
cout << "(1)Circle (2)Rectangle (3)Square (0)Quit: \n";
cin >> choice;

switch (choice)
{
case 1: sp = new Circle(5);
break;
case 2: sp = new Rectangle(4,6);
break;
case 3: sp = new Square (5);
break;
default: fQuit = TRUE;
break;
}
if (fQuit)
break;

sp->Draw();
cout << "\n";
}
}


int main()
{
startof();
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com