首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 自定义数据类型的问题 [已结贴,结贴人:tgzhang]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 17:32:21 楼主
    首先我定义了一个类型
    typedef struct ObsSet  //测量次数
    {
        int Count;  /// <一测回所测点数
        double *ets;   

        ~ObsSet()  {if(ets!=NULL) delete []ets;}

        ObsSet():Count(0){ets=NULL;}
        ObsSet(int count):Count(count)
        {
            ets=new double [Count];    //包括上半测回和下半测回
        }

    }ObsSet;

    再定义一个:
    typedef struct ObsStation /// <测站
    {
        CString    Name;          /// <测站名        --  不能为空白
        double      Height;        /// <测站高, 对于自由设置而言,为0
        double      X,Y,Z;          /// <测站三维坐标,对自由设站而言均为0

        int        CountOfTarget;  /// <测点数
        int        CountOfObsSet;  /// <测回数Observation set

        ObsSet *ets; 
        ObsStation(int ct,int co):CountOfTarget(ct),CountOfObsSet(c0)
        {
        ets=new ObsSet[CountOfObsSet];  ///问题就在这里
        }

    }ObsStation ;

    ///------------------------
      ets=new ObsSet[CountOfObsSet];这句话显然会调用的ObsSet类型中的ObsSet()这个构造函数。
    而我希望这里能够调用  ObsSet(int count)这个构造函数。说明count就是CountOfTarget.

        请问这个问题如何解决?


    120  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-02-24 17:44:161楼 得分:20
    采用指定地址构造对象
    C/C++ code
    struct ObsSet //测量次数 { int Count; /// <一测回所测点数 double *ets; ~ObsSet() {if(ets!=NULL) delete []ets;} //ObsSet():Count(0){ets=NULL;} ObsSet(int count):Count(count) { ets=new double [Count]; //包括上半测回和下半测回 } }; //再定义一个: struct ObsStation /// <测站 { CString Name; /// <测站名 -- 不能为空白 double Height; /// <测站高, 对于自由设置而言,为0 double X,Y,Z; /// <测站三维坐标,对自由设站而言均为0 int CountOfTarget; /// <测点数 int CountOfObsSet; /// <测回数Observation set ObsSet *ets; ObsStation(int ct,int co):CountOfTarget(ct),CountOfObsSet(co) { char* p = new char[sizeof(ObsSet)*CountOfObsSet]; ///问题就在这里 for( int i=0; i < CountOfObsSet ; i ++ ){ new( p+ i*sizeof(ObsSet) )ObsSet(CountOfObsSet); } ets = (ObsSet *)p; } }; int main() { ObsStation xx(10,30); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-02-24 17:53:202楼 得分:100
    刚才的代码释放有点问题
    C/C++ code
    struct ObsSet //测量次数 { int Count; /// <一测回所测点数 double *ets; ~ObsSet() {if(ets!=NULL) delete []ets;} //ObsSet():Count(0){ets=NULL;} ObsSet(int count):Count(count),ets(new double[count]) { //ets=new double [Count]; //包括上半测回和下半测回 } }; //再定义一个: struct ObsStation /// <测站 { std::string Name; /// <测站名 -- 不能为空白 double Height; /// <测站高, 对于自由设置而言,为0 double X,Y,Z; /// <测站三维坐标,对自由设站而言均为0 int CountOfTarget; /// <测点数 int CountOfObsSet; /// <测回数Observation set ObsSet *ets; ObsStation(int ct,int co):CountOfTarget(ct),CountOfObsSet(co) ,ets(0) { char* p = new char[sizeof(ObsSet)*CountOfObsSet]; ///问题就在这里 for( int i=0; i < CountOfObsSet ; i ++ ){ new( p+ i*sizeof(ObsSet) )ObsSet(CountOfObsSet); } ets = (ObsSet *)p; } ~ObsStation() { for( int i=0; i < CountOfObsSet ; i ++ ){ //ObsSet* p = ( p+ i*sizeof(ObsSet) ); ets[i].~ObsSet(); } delete (char*)ets; } }; int main(int argc, char* argv[]) { ObsStation xx(10,2); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-02-24 18:14:003楼 得分:0
    非常感谢akirya 的大力协助。

    看来我的这个想法实现还是蛮复杂的。不知道有没有更简洁一点的方法,struct ObsSet定义也是可以考虑修改的。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • akirya
    • 等级:
    发表于:2008-02-24 18:20:244楼 得分:0
    使用默认的构造函数,构建成功之后挨个设置所需要设置的变量.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved