C++ 嵌套继承LNK2001和LNK1120错误
我的代码不起作用。我尝试将简单的继承形状作为基类,在形状“二维”和“三维”下尝试两个类,并在该类下尝试形状。这是我的代码,但当我试图将一个新类定义为三角形时,它会给我错误LNK2001LNK1120。它看起来很复杂,但我必须得到每个物体的面积、体积和周长。 我的全部错误: Severity Code Description Project File Line Suppression State Error LNK2001 unresolved external symbol "public: virtual double __thiscall TwoDimensionShape::Area(void)" (?Area@TwoDimensionShape@@UAENXZ) Shape c:\Users\aleyn\documents\visual studio 2015\Projects\Shape\Shape\Source.obj 1 我的.cppC++ 嵌套继承LNK2001和LNK1120错误,c++,class,inheritance,lnk2001,C++,Class,Inheritance,Lnk2001,我的代码不起作用。我尝试将简单的继承形状作为基类,在形状“二维”和“三维”下尝试两个类,并在该类下尝试形状。这是我的代码,但当我试图将一个新类定义为三角形时,它会给我错误LNK2001LNK1120。它看起来很复杂,但我必须得到每个物体的面积、体积和周长。 我的全部错误: Severity Code Description Project File Line Suppression State Error LNK2001 unresolved external sym
#include "Shape.h"
#include <iostream>
using namespace std;
Shape::Shape(double w, double h, double d)
{
width = w;
height = h;
depth = d;
}
double Shape::Area()
{
return width * height;
}
double Shape::Perimeter()
{
return (width + height) * 2;
}
double Shape::Volume()
{
return width * height * depth;
}
double ThreeDimensionShape::Area()
{
return (2 * (height * width) + 2 * (depth * width) + 2 * (depth * height));
}
double ThreeDimensionShape::Volume()
{
return width * height * depth;
}
double ThreeDimensionShape::Perimeter()
{
return (4 * width + 4 * height + 4 * depth);
}
void Triangle::setTriangleSides(double s1, double s2, double b)
{
side1 = s1;
side2 = s2;
base = b;
}
void TwoDimensionShape::Display()
{
cout << "Perimeter: " << Perimeter() << endl;
cout << "Area: " << Area() << endl;
cout << "Volume: " << Volume() << endl;
}
#包括“Shape.h”
#包括
使用名称空间std;
形状::形状(双w、双h、双d)
{
宽度=w;
高度=h;
深度=d;
}
双形::面积()
{
返回宽度*高度;
}
双形::周长()
{
返回(宽度+高度)*2;
}
double Shape::Volume()
{
返回宽度*高度*深度;
}
双三维形状::面积()
{
返回(2*(高度*宽度)+2*(深度*宽度)+2*(深度*高度));
}
双三维形状::体积()
{
返回宽度*高度*深度;
}
双三维形状::周长()
{
返回(4*宽度+4*高度+4*深度);
}
空心三角形::setTriangleSides(双s1、双s2、双b)
{
侧1=s1;
侧2=s2;
基数=b;
}
void二维形状::Display()
{
错误信息说明了一切
LNK2001 unresolved external symbol "public: virtual double __thiscall TwoDimensionShape::Area(void)"
您尚未编写TwoDimenionalShape::Area
在头文件中,您承诺要编写一个头文件,但您没有错误消息说明了一切
LNK2001 unresolved external symbol "public: virtual double __thiscall TwoDimensionShape::Area(void)"
您尚未编写TwoDimenionalShape::Area
在您的头文件中,您承诺要编写一个,但您没有显示与您的问题无关的完整错误消息,但是为什么您的形状构造函数要分配给构造函数体中的成员,而不是使用初始化列表?\define M_PI 3.14159265358979323846
-huh?M_PI
是真的dy在
标题中定义。为什么您需要自己的定义?我只是简单地将我在这里看到的关于我的错误的所有信息都放在代码中,这就是为什么它是一团混乱。“未解析的外部符号…”因此,您需要链接到定义/实现相关符号的任何对象文件或库。您必须显示与您的问题无关的完整错误消息,但是为什么您的形状构造函数要分配给构造函数体中的成员,而不是使用初始化列表?定义M_PI 3.14159265358979323846代码>-嗯?M_PI
已经在
标题中定义。为什么您需要自己的定义?我只是简单地将我在这里看到的关于我的错误的所有内容都放在代码中,这就是为什么它很混乱的原因。“未解析的外部符号…”因此,您需要链接到定义/实现所讨论符号的任何对象文件或库。在这种情况下,最好删除承诺,而不要编写此函数。TwoDimensionShape
没有计算面积所需的信息。将该作业留给从TwoDimensionShape
派生的类来完成w如何计算面积。但我不能使用它,因为它在Shape::area()中,如果我应该重新定义它,继承的意义是什么?@notacomputer如果TwoDimensionShape
没有定义Area
,您将无法实例化TwoDimensionShape
,但是由于它仍然太抽象,无法单独做任何有用的事情,您应该无法实例化一个,并且Area
将属于从它派生的类。您将能够调用Shape
或任何派生类上的Area
。一旦将函数定义为类中,所有子类都拥有该函数,无论它们是否重写该函数。在这种情况下,最好删除承诺,而不要编写此函数。TwoDimensionShape
没有计算面积所需的信息。将该作业留给从TwoDimensionShape
派生的类,这些类确实知道如何计算面积。但我不能使用它,因为它位于Shape::area()中,如果我应该重新定义它,继承的意义是什么?@notacomputer如果TwoDimensionShape
没有定义Area
,您将无法实例化TwoDimensionShape
,但是由于它仍然太抽象,无法单独做任何有用的事情,您应该无法实例化一个,并且Area
将属于从它派生的类。您将能够调用Shape
或任何派生类上的Area
。一旦将函数定义为类中,所有子类都拥有该函数,无论它们是否重写该函数。
LNK2001 unresolved external symbol "public: virtual double __thiscall TwoDimensionShape::Area(void)"