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

我把我写的.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
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
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
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 8楼 寒风中的细雨
我把所有的virtual和const去掉之后就可以生成了。

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

txthx

看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 18:46
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 9楼 lz1091914999
前两个问题已经解决了!
现在的问题是类的定义里面因为写了virtual,主函数那里不能实例化啊。去掉就可以了。

P.S.老师非让用类啊= =牛肉满面。。还要用clone啥的。。我还没有研究出来。。


看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 18:51
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 11楼 lz1091914999
大体来说是想实现fund类中netvalue和stockprice不相等且满足某些条件时的套利,得到一个关于(netvalue和stockprice)的收益。

而fund类会派生出来各种具体的形式,比如我写的这个就是motherfund和两个umbrellafund来满足某个条件。

我想用这个大思路来完成老师要求的【使用继承、多态、抽象类&clone函数等】做一个自定主题project的考试题目

看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 18:58
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 13楼 lz1091914999
恩!像你这样说的改了就对了。。。

最后的一个小问题是这里
程序代码:
class motherfund: public fund
{
public:
    motherfund(double netvalue_) : netvalue(netvalue_) {};
    virtual double get_netvalue() const
    {return netvalue;}
    virtual double get_stockprice() const
    {return netvalue;//不知道这样改了会不会bug....
    }

private:
    double netvalue;
};
motherfund这里是没有stockprice这个成员的。。但是如果我没有返回值的话就会报错,但是也不能声明为纯虚函数了。我就强制的给它get_stockprice()中return了netvalue,其实这是不对的。。。

看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 19:10
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 15楼 lz1091914999
好像是那个!!!!!!!!!书上写的叫做virtual copy constructor

哇哇哇。。可不可以求告诉我它是干嘛用的。。应该怎么使用在函数里面呀

看那没有形象的发型和憔悴的脸就知道这是一只和C++恋爱的宅女。yes,I am!
2012-11-20 19:13
xixifans
Rank: 1
等 级:新手上路
帖 子:118
专家分:2
注 册:2012-11-15
收藏
得分:0 
回复 18楼 lz1091914999
恩。貌似是的。。我这一系列的类,我最基础的想法是所有的fund都会有netvalue,有的还有stockprice,有的还会增加其他指标,就可以某一些增加一些成员。这是不是建立派生类的正确思路啊?我不是很确定。。

容我从考试的角度问一句这里咋加入复制构造函数吧


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



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

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