- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在开发一个使用虚函数用户的程序。我只使用了一个虚拟函数,并且遇到了一个似乎是常见问题的常见解决方案,我已经尝试过但不幸的是没有成功。
我最初有 virtual void calcArea();在 BasicShape.h 中没有任何定义或指定为纯虚函数。我更改了它并在末尾添加了 {}(正如另一个有类似问题的线程所建议的那样),但我仍然收到以下错误:
我输入:
g++ BasicShape.h BasicShape.cpp circle.h circle.cpp Rectangle.h Rectangle.cpp driver.cpp -o Lab4
然后我得到:
/tmp/ccf1Y4Br.o: In function `BasicShape::BasicShape()': circle.cpp:(.text._ZN10BasicShapeC2Ev[_ZN10BasicShapeC5Ev]+0xf): undefined reference to `vtable for BasicShape'
/tmp/ccf1Y4Br.o:(.rodata._ZTI6circle[_ZTI6circle]+0x10): undefined reference to `typeinfo for BasicShape'
/tmp/ccc7gjtH.o:(.rodata._ZTI9Rectangle[_ZTI9Rectangle]+0x10): undefined reference to `typeinfo for BasicShape'
collect2: error: ld returned 1 exit status
有什么想法吗?
这是实现文件BasicShape.h:
#ifndef BASICSHAPE_H
#define BASICSHAPE_H
class BasicShape
{
protected:
double area;
public:
double getArea() const;
virtual void calcArea();
};
#endif
随附的 BasicShape.cpp 文件:
#include "BasicShape.h"
double BasicShape::getArea() const
{
return area;
}
void BasicShape::calcArea()
{
}
圆.h:
#include "BasicShape.h"
#ifndef CIRCLE_H
#define CIRCLE_H
class circle : public BasicShape
{
private:
long centerX;
long centerY;
double radius;
public:
circle(long, long, double);
long getCenterX() const;
long getCenterY() const;
virtual void calcArea();
};
#endif
圆.cpp:
#include "circle.h"
// constructor
circle::circle(long userIn, long userIn2, double userIn3)
{
centerX = userIn;
centerY = userIn2;
radius = userIn3;
calcArea();
}
// accesors
long circle::getCenterX() const
{
return centerX;
}
long circle::getCenterY() const
{
return centerY;
}
// virtual function
void circle::calcArea()
{
area = (3.14159 * radius * radius);
}
矩形.h
#include "BasicShape.h"
#ifndef RECTANGLE_H
#define RECTANGLE_H
class Rectangle : public BasicShape
{
private:
long width;
long length;
public:
Rectangle(long, long);
long getWidth() const;
long getLength() const;
virtual void calcArea();
};
#endif
矩形.cpp:
#include "Rectangle.h"
// constructor
Rectangle::Rectangle(long userIn, long userIn2)
{
width = userIn;
length = userIn2;
calcArea();
}
// accessors
long Rectangle::getWidth() const
{
return width;
}
long Rectangle::getLength() const
{
return length;
}
void Rectangle::calcArea()
{
area = (length * width);
}
驱动程序不完整,但无论如何与我的问题无关(至少我是这么认为的)。
#include <cassert>
#include <iostream>
#include "BasicShape.h"
#include "Rectangle.h"
#include "circle.h"
using namespace std;
int main()
{
cout << "Testing the functionality and efficiency of the circle class...\n";
// declare circle object and test accessors and area computation
circle objCircle(8,8,4);
assert(objCircle.getCenterX() == 8);
assert(objCircle.getCenterY() == 8);
assert(objCircle.getArea() == 50.26544);
cout << "Circle object testing completed successfully\n";
cout << "Testing the functionality and efficiency of the Rectangle class...\n";
// declare rectangle object and test accessors and area computation
//Rectangle objRec();
return 0;
}
最佳答案
实际上,正如所指出的,您不必编译 header 。 (虽然你可以,但在这里无关紧要——gcc 将生成预编译头文件)。
更有趣的是:您的示例在这里完美运行,GCC 4.6.3。
此外,旁注:calcArea 不应公开
关于c++ - 未定义对 `typeinfo and ' vtable 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927717/
以 TypeInfo 开头表示通用类型的对象,我想检索 TypeInfo s 代表泛型类型的每个类型参数。我想将其公开为具有此签名的扩展方法: public static TypeInfo[] Get
我在 https://issues.apache.org/jira/browse/KYLIN-2511 上发现了类似的错误 环境:hadoop-2.7.1hbase-1.3.2apache-hive-
我尝试将通用记录与 RTTI 结合使用,但遇到了类型信息问题。有谁知道为什么以下内容无法使用 Delphi 2010 进行编译? program GenericTypeInfo; {$APPTYPE
有没有办法在静态构造函数中获得等效的 GetType? 我想遍历静态构造函数中类型的可用属性,但 GetType 是一个实例方法?为什么是这样? typeinfo 应该存在于静态上下文中。有没有解决的
我有一个段错误。用gdb调试,栈中第一帧是 在 MyClass() 的类型信息中 有人知道类型信息吗? 最佳答案 有同样的问题;发布解决方案,因为它可能会帮助其他人: 彻底重建项目解决了这个问题——一
class A {} A a; type_info info = typeid (a); // error type_info is private 我想要一个列表 list存储类的类型。有解
我能做到: std::vector vec = { 1, 2, 3, 4, 5 }; 但是我不能这样做: std::vector ClassBlackList = { typeid(Class1),
对于需要泛型类型“系列”的一段代码,我尝试使用 TypeInfo 来检索所需的信息。 class function GetTypeKind:TTypeKind; 对于大多数类型我都能弄清楚。但匿名方法
在下面的例子中,我不希望 stdout : Base Foo Bar ,但我得到 P4Base P4Base P4Base : #include #include #include #inclu
我无法链接到动态库,该库定义了我需要使用的一组类。我的编译后的代码尝试链接到该类的typeinfo结构,但库未将其导出。但是,该类的虚拟表是。 使用nm,我找到了要解析的符号: U __ZTIN3ne
我正在尝试在 c++ 11 中使用 std::中的shared_ptr,因此我将其中显然使用了 typeinfo 的内容包括在内。问题是我收到以下错误。 In file included from /
是否有可能以某种方式获取 TypeInfo 对象中包含的类型的完全限定名称? 在调试器中,许多这些值很好地显示为 System.Int32,但是当它被打印出来时,没有一个包含这个完全限定的名称。我需要
在new Reflection API , TypeInfo.Declared* 属性是访问在类型上声明的成员(字段、属性、方法等)的正确方法。但是,这些属性不包括从基类继承的成员。 旧的 TypeI
我声明了以下枚举类型,我希望其中第一个成员的序数值为 1(一)而不是通常的 0(零): type TMyEnum = ( meFirstValue = 1,
我有以下类作为 JSON 对象的 java 表示: public class Vehicle { private VehicleType vehicleType; private Vehi
我试图通过在 C# 中使用 System.Reflection 将所有定义的类型检索到 .NET 程序集中。首先我加载程序集: var assembly = Assembly.LoadFrom("C:
当我使用 Metrics plugin 时,使用 JDK 1.7 运行 Eclipse Indigo ,我没有看到指标 View ,因此看不到任何指标。另外,当我尝试导出 -> 其他 -> 指标时,它
我遇到的问题与这里讨论的问题非常相似: g++ undefined reference to typeinfo 即便如此,我相信我也不会遇到同样的问题,而且该主题的答案并不能真正帮助我。我所拥有的是:
我正在阅读现代 C++ 设计。以下是摘自类型信息描述的文本片段。 The before member function introduces an ordering relationship for
在 C++ 中,我可以使用 typeid 运算符来检索任何多态类的名称: const char* name = typeid( CMyClass ).name(); 返回的 const char* 指
我是一名优秀的程序员,十分优秀!