加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C++编程出现error:'class' type redefinition的错误一般的原因

(2012-11-28 20:14:57)
标签:

error:'class'typere

error

c

C++编程出现error:'class' type redefinition的错误一般的原因

如下面的程序:

#include
#include
using namespace std;
class Item_base
{
public:
 Item_base(const string &book=" ",double sale_price=0.0):isbn(book),price(sale_price){
 cout<<"Item_base(const string&,doble)"<<endl;
 }
 string book()const
 {
  return isbn;
 }
 virtual double net_price(size_t n)const
 {
  return n*price;
 }
 Item_base(const Item_base &ib):isbn(ib.isbn),price(ib.price)
 {
  cout<<"Item_base(const Item_base&)"<<endl;
 }
 Item_base& operator=(const Item_base &rhs)
 {
  isbn=rhs.isbn;
  price=rhs.price;
  cout<<"Item_base& opreator=()"<<endl;
  return *this;
 }
 virtual ~Item_base()
 {
  cout<<"~Item_base()"<<endl;
 }
private:
 string isbn;
protected:
 double price;

};

#include"Item_base.h"
#include
#include
using namespace std;
class Bulk_item:public Item_base
{
public:
 Bulk_item(const string book=" ",double sale_price=0.0,size_t qty=0,double disc_price=0.0):Item_base(book,sale_price),min_qty(qty),discount(disc_price)
 {
  cout<<"Bulk_item(const string ,double ,size_t ,double )"<<endl;
 }
 double net_price(size_t n)const
 {
  if(n>min_qty)
   return n*(1-discount)*price;
  else
   return n*price;
 }
 Bulk_item(const Bulk_item &b):Item_base(b),min_qty(b.min_qty),discount(b.discount)
 {
        cout<<"Bulk_item(const Bulk_item &)"<<endl;
 }
 Bulk_item& operator=(const Bulk_item& rhs)
 {
  if(this!=&rhs)
   Item_base::operator=(rhs);
  min_qty=rhs.min_qty;
  discount=rhs.discount;
  cout<<"Bulk_item& operator=()"<<endl;
  return *this;
 }
 virtual ~Bulk_item()
 {
  cout<<"~Bulk_item()"<<endl;
 }
private:
 size_t min_qty;
 double discount;
};

 

 

#include"Item_base.h"
#include"Bulk_item.h"
#include
#include
using namespace std;
void func1(Item_base obj)
{
}
void func2(Item_base &obj){}
Item_base func3(){
    Item_base obj;
 return obj;
}
int main()
{
 Item_base iobj;
 func1(iobj);
 func2(iobj);
 iobj=func3();
 Item_base *p=new Item_base;
 delete p;
 Bulk_item bobj;
 func1(bobj);
 func2(bobj);
 //bobj=func3();
 Bulk_item *q=new Bulk_item;
 delete q;
 return 0;

}

 

编译时会出现如下错误:

Compiling...
main.cpp
e:\c++ test\c++primer 15\buybook\item_base.h(7) : error C2011: 'Item_base' : 'class' type redefinition
执行 cl.exe 时出错.

 

改正:

只需在第一个头文件加上:

#ifndef ITEM_BASE
#define ITEM_BASE

#endif

避免类重复定义。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有