文件Rectangle.hxx有一个标题
#ifndef Rectangle_included
#define Rectangle_included
#include <iostream>
#include <math.h>
#include "GetL.hxx"
using namespace std;
class Rectangle: public GetL
{
int width;
int value;
public:
Rectangle();
Rectangle(int v, int w);
Rectangle(const Rectangle& b);
int getWidth();
int getValue();
Rectangle & plus(int newval);
};
#endif //Rectangle_included
文件GetL.hxx的定义如下:
#ifndef GetL_included
#define GetL_included
#include <iostream>
using namespace std;
class GetL
{
public:
virtual int getWidth();
};
#endif //GetL_include
Rectangle.cxx文件包含各种定义:
#include <iostream>
#include <math.h>
#include "Rectangle.hxx"
using namespace std;
Rectangle::Rectangle()
{
value=0;
width=0;
}
Rectangle::Rectangle(int v, int w)
{
value=v;
width=w;
}
Rectangle::Rectangle(const Rectangle& b)
{
value= b.value;
width= b.width;
}
int Rectangle::getWidth()
{
return width;
}
int Rectangle::getValue()
{
return value;
}
Rectangle& Rectangle::plus(int newval)
{
value+=newval;
if(value>=pow(2,width))
cout<<"Overflow";
return *this;
}
但是我在编译 Rectangle.cxx 时收到错误。
/tmp/cclETn3R.o:Rectangle.cxx:(.text$_ZN4GetLC2Ev[GetL::GetL()]+0*8): undefined reference to 'vtable for Getl'
我该如何删除它?如何定义文件 GetL.cxx 或我不需要?
答案 0 :(得分:2)
您需要先编译不同的文件而不进行链接。在UNIX编译器上,这通常使用-c
选项完成。构建可执行文件时,您可以指定所有生成的.o
个对象。或者,您可以一次指定所有源文件,但这实际上只适用于非常小的项目。
答案 1 :(得分:0)
您必须实施GetL::getWidth()
。鉴于您的其他文件,您可能会在GetL.cxx
中实现它。