| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1370 人关注过本帖
标题:【小宅女编了一下午啊】可是为什么我定义的类不能识别
只看楼主 加入收藏
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:25 
【小宅女编了一下午啊】可是为什么我定义的类不能识别
亲们。我下午用我自己能理解的方法编了编我想要编的程序,无奈我写好了以后报了一大堆错,我认真看了看大部分就是说我定义的类它觉得不对,或者是识别别不了,求懂得大牛牛小牛牛帮我看看吧!!猜测这个对懂得人应该是一个很小的问题吧。求解救!!爱你们!我最后一点点分也散在这里吧。。不够去别的帖子回复吧

我把我写的.h&.cpp贴出来

类定义头文件
程序代码:
#include <iostream>
using namespace std;

class fund
{
public:
    fund(){};


private:
};

class motherfund: public fund
{
public:
    motherfund(double netvalue_) : netvalue(netvalue_) {};

private:
    double netvalue;
};

class umbrellafund : public fund
{
public:
    umbrellafund(double netvalue_,double stockprice_) : netvalue(netvalue_),stockprice(stockprice_) {};
private:
    double netvalue;
    double stockprice;
};

操作函数头文件
程序代码:
#include <iostream>
#include "classfund.h"//为什么我include了这个头文件它识别不到呢???
using namespace std;

double LOFarbitrage(const motherfund& motherfund_,const umbrellafund& umbrellafundA_,const umbrellafund& umbrellafundB_,int shares_)

操作函数具体说明.CPP
程序代码:
#include <iostream>
#include "classfund.h"//为什么我include了这个头文件它识别不到呢???
using namespace std;
double LOFarbitrage(const motherfund& motherfund_,const umbrellafund& umbrellafundA_,const umbrellafund& umbrellafundB_,int shares_)
{double Pr=0.015;

 double Rr=0.005;

 double Br=0.0005;


 double condition1=umbrellafundA_.stockprice+umbrellafundB_.stockprice)*(1-Br)-(2*motherfund_.netvalue*(1+Pr);

 //[1]    (Ma+Mb)*x*(1-br)> 2x*Nm*(1+Pr):
 double conditon2=umbrellafundA_.stockprice+umbrellafundB_.stockprice)*(1-Br)-(2*motherfund_.netvalue*(1+Rr);

 //[2]    (Ma+Mb)*x*(1-br)< 2x*Nm*(1+Rr):

if (condition1>0)
    return contion1*shares_
else if (condition2<0)
    return condition2*shares_
else
    return 0;
}


我的主程序
程序代码:
int main()
{double mothernetvalue;//输入需要的五个值,具体需要的输入函数没写
double umbrellavalueA,umbrellapriceA;
double umbrellavalueB,umbrellapriceB;
int theshares;//用多少份来进行套利

cout<<"输入母基金净值"<<endl;
cin>>mothernetvalue;

cout<<"输入子基金A净值"<<endl;
cin>>umbrellavalueA;

cout<<"输入子基金A市价"<<endl;
cin>>umbrellapriceA;

cout<<"输入子基金B净值"<<endl;
cin>>umbrellavalueB;

cout<<"输入子基金B市价"<<endl;
cin>>umbrellapriceB;

cout<<"每次套利多少份"<<endl;
cin>>theshares;

motherfund the_motherfund(mothernetvalue);
umbrellafund umbrellaA(umbrellavalueA,umbrellapriceA);//建立需要的五个变量
umbrellafund umbrellaB(umbrellavalueB,umbrellapriceB);


double thepayoff=LOFarbitrage(the_motherfund,umbrellaA,umbrellaB,theshares)//代入这个函数计算有没有套利,套利出来是多少,为了简便没有的时候设为0

if (thepayoff==0)
    cout<<"此时无套利机会"<<endl;
if (thepayoff!=0)
    cout<<"此时有套利机会,可以套利"<<thepayoff<<endl;

}




2012-11-20 16:37
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
//bccn.c
#include<stdio.h>
#include<stdlib.h>

这样子注明文件名  好理解           
你这上面到底有几个文件?
2012-11-20 17:08
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 2楼 寒风中的细雨
四个文件,两个CPP两个H文件。第一个是我定义的类,报错就是说我类重定义或者找不到类。另外两个CPP都要include它才可以。PS如果我用尖括号,它识别不了我include的文件

看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 17:21
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:1 
回复 3楼 xixifans
类重定义

把类的成员函数提炼出来  实现单独用一个cpp文件


2012-11-20 17:36
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 4楼 寒风中的细雨
我还木有设成员函数。。。我好像知道了。因为要加个
ifndef
define
endif..的东东。。。thx。。我再去改改其他的错

看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 17:38
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
经过我的一番修改。我现在的错误主要是“不能实例化抽象类”,这是什么意思呢?
类定义头文件
程序代码:
#ifndef FUND_H
#define FUND_H

class fund
{
public:
fund(){};
virtual double get_netvalue() const=0;
virtual double get_stockprice() const=0;


private:
};

class motherfund: public fund
{
public:
    motherfund(double netvalue_) : netvalue(netvalue_) {};
    virtual double get_netvalue()
    {return netvalue;}
    virtual double get_stockprice()
    {}

private:
    double netvalue;
};

class umbrellafund : public fund
{
public:
    umbrellafund(double netvalue_,double stockprice_) : netvalue(netvalue_),stockprice(stockprice_) {};
    virtual double get_netvalue()
    {return netvalue;}
    virtual double get_stockprice()
    {return stockprice;}
private:
    double netvalue;
    double stockprice;
};
#endif
是我这里定义的有问题嘛?

函数定义头文件
程序代码:
#include <iostream>
#include "fund.h"
using namespace std;

double LOFarbitrage(const motherfund& motherfund_,const umbrellafund& umbrellafundA_,const umbrellafund& umbrellafundB_,int shares_)
函数CPP
程序代码:
#include <iostream>
#include "fund.h"//为什么我include了这个头文件它识别不到呢???
using namespace std;
double LOFarbitrage(const motherfund& motherfund_,const umbrellafund& umbrellafundA_,const umbrellafund& umbrellafundB_,int shares_)
{double Pr=0.015;

 double Rr=0.005;

 double Br=0.0005;


 double condition1=(umbrellafundA_.get_stockprice()+umbrellafundB_.get_stockprice())*(1-Br)-2*motherfund_.get_netvalue()*(1+Pr);

 //[1]    (Ma+Mb)*x*(1-br)> 2x*Nm*(1+Pr):
 double condition2=(umbrellafundA_.get_stockprice()+umbrellafundB_.get_stockprice())*(1-Br)-2*motherfund_.get_netvalue()*(1+Rr);

 //[2]    (Ma+Mb)*x*(1-br)< 2x*Nm*(1+Rr):

if (condition1>0)
    return condition1*shares_;
else if (condition2<0)
    return (-1)*condition2*shares_;
else
    return 0;
}
主函数(主函数中
motherfund the_motherfund(mothernetvalue);
umbrellafund umbrellaA(umbrellavalueA,umbrellapriceA);//建立需要的五个变量
umbrellafund umbrellaB(umbrellavalueB,umbrellapriceB);
会报错:“不能实例化抽象类”
程序代码:
#include "fund.h"
#include "LOFarbitrage.h"
#include <iostream>
;using namespace std;


int main()
{double mothernetvalue;//输入需要的五个值,具体需要的输入函数没写
double umbrellavalueA,umbrellapriceA;
double umbrellavalueB,umbrellapriceB;
int theshares;//用多少份来进行套利

cout<<"输入母基金净值"<<endl;
cin>>mothernetvalue;

cout<<"输入子基金A净值"<<endl;
cin>>umbrellavalueA;

cout<<"输入子基金A市价"<<endl;
cin>>umbrellapriceA;

cout<<"输入子基金B净值"<<endl;
cin>>umbrellavalueB;

cout<<"输入子基金B市价"<<endl;
cin>>umbrellapriceB;

cout<<"每次套利多少份"<<endl;
cin>>theshares;

motherfund the_motherfund(mothernetvalue);
umbrellafund umbrellaA(umbrellavalueA,umbrellapriceA);//建立需要的五个变量
umbrellafund umbrellaB(umbrellavalueB,umbrellapriceB);


double thepayoff=LOFarbitrage(the_motherfund,umbrellaA,umbrellaB,theshares);//代入这个函数计算有没有套利,套利出来是多少,为了简便没有的时候设为0

if (thepayoff==0)
    cout<<"此时无套利机会"<<endl;

if (thepayoff!=0)
    cout<<"此时有套利机会,可以套利"<<thepayoff<<endl;

}






 

看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 18:31
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
学到抽象类了?
2012-11-20 18:35
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:0 
virtual double get_netvalue() const=0;

 virtual double get_stockprice() const=0;

    virtual double get_netvalue();
     virtual double get_stockprice();


注意下形式  不是相同的函数
继承了抽象类  如果想实例化  必须实现抽象类的方法(全部)
2012-11-20 18:38
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:4 
什么是识别不到?是预处理器找不到文件?如果是这样的话请看看头文件和cpp文件是不是在同一目录下。类重定义?如果一个cpp文件里只包含这个头文件一次的话是不会出现的。

你还得把LOFarbitrage声明为motherfund和umbrellafund的友元函数,直接引用私有变量是不行的,或着分别为每个类写一个setter和getter。

如果简单的问题呢,用过程式的方法来处理就好了,没必要非得建立类,还建立继承关系,别以为这样就觉得自己很专业。

My life is brilliant
2012-11-20 18:44
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 8楼 寒风中的细雨
我把所有的virtual和const去掉之后就可以生成了。

我不是很明白你说的意思,如果想要保留虚函数的话,我应该怎么做实例化啊??可不可以给小解释一下子

txthx

看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 18:46
快速回复:【小宅女编了一下午啊】可是为什么我定义的类不能识别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017648 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved