C++编译错误 - 0010 - undefined reference to `vtable for Bulk_item'
2013-03-01 22:54
417 查看
class Item_base
{
public:
Item_base(const std::string &book ="",double sales_price = 0.0):isbn(book),price(sales_price) {}
// Item_base(){};
std::string book() const { return isbn;}
virtual Item_base* testReturnType() { return NULL;}
virtual double net_price(std::size_t n) const
{
return n*price;
}
virtual ~Item_base() {}
private:
std::string isbn;
protected:
double price;
};
class Bulk_item:public Item_base
{
public:
double net_price(std::size_t cnt)const
{
if(cnt >= min_qty) return cnt * (1-discount)*price;
else
return cnt*price;
}
Bulk_item* testReturnType();// {return NULL;}
~Bulk_item(){}
private:
std::size_t min_qty;
double discount;
};
int main()
{
Item_base item;
Item_base *p = &item;//undefined reference to `vtable for Bulk_item'|
Bulk_item bulk;
p = &bulk;
return 0;
}
错误提示:undefined reference to `vtable for Bulk_item'
错误原因: 派生类 Bulk_item 没有定义基类的虚函数.
实际上只声明了函数而没有实现有可能会出现编译错误. 若调用了没有定义的函数,则必会出错.
{
public:
Item_base(const std::string &book ="",double sales_price = 0.0):isbn(book),price(sales_price) {}
// Item_base(){};
std::string book() const { return isbn;}
virtual Item_base* testReturnType() { return NULL;}
virtual double net_price(std::size_t n) const
{
return n*price;
}
virtual ~Item_base() {}
private:
std::string isbn;
protected:
double price;
};
class Bulk_item:public Item_base
{
public:
double net_price(std::size_t cnt)const
{
if(cnt >= min_qty) return cnt * (1-discount)*price;
else
return cnt*price;
}
Bulk_item* testReturnType();// {return NULL;}
~Bulk_item(){}
private:
std::size_t min_qty;
double discount;
};
int main()
{
Item_base item;
Item_base *p = &item;//undefined reference to `vtable for Bulk_item'|
Bulk_item bulk;
p = &bulk;
return 0;
}
错误提示:undefined reference to `vtable for Bulk_item'
错误原因: 派生类 Bulk_item 没有定义基类的虚函数.
实际上只声明了函数而没有实现有可能会出现编译错误. 若调用了没有定义的函数,则必会出错.
相关文章推荐
- 两个C++编译错误及解决办法--does not name a type和field `XX' has incomplete type
- 重学c++:unknown character '0xa1'编译错误
- 两个C++编译错误及解决办法--does not name a type和field `XX' has incomplete type
- 两个C++编译错误及解决办法--does not name a type和field `XX' has incomplete type
- C++编译遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR')
- 继承QGraphicsItem 编译错误:error: no member named 'staticMetaObject' in 'QGraphicsItem'; did you mean sim
- gcc 4.3.2 编译时 发生 error: redeclaration of C++ built-in type 'bool' 错误
- 两个C++编译错误及解决办法--does not name a type和field `XX' has incomplete type
- C++编译遇到参数错误(cannot convert parameter * from 'const char [**]' to 'LPCWSTR')
- 驱动工程中添加新文件后出现的“cannot open source file '***.tmh'"编译错误
- Libcurl使用OpenSSL编译出现undefined reference to `COMP_CTX_free'错误备忘
- 编译错误:syntax error : identifier '__RPC__in'
- 包含Iphlpapi.h 编译错误 error C2065: 'HRASCONN'
- 编译Linux内核错误:ln: creating symbolic link `include/asm': Operation not supported
- iOS 当运行Xcode6时,编译代码成功,但是登陆模拟器失败,显示错误:The Operation couldn't be completed.(LaunchServicesError error
- Visual Studio 2010 error C2065: '_In_opt_z_' : undeclared identifier 编译错误
- MySQL 编译出现 error: 'SSL_OP_NO_COMPRESSION' undeclared (first use in this function) 错误
- JNI生成C++头文件,提示错误“找不到‘com.mps.test.HelloWorld'的类文件”
- glm编译错误问题解决 formal parameter with __declspec(align('16')) won't be aligned
- jni编译问题:jin中添加LOG方法以及undefined reference to `__android_log_print'错误