您的位置:程序门 -> vc/mfc -> 基础类



如何正确实例化含有类的类,,,急等中....


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何正确实例化含有类的类,,,急等中....[已结贴,结贴人:zhaomishun]
发表于:2007-09-18 16:22:40 楼主
/*
类cinitapp含有一个cinitconfig类型成员m_config;   类cinitconfig含有一个cstring类型成员;
创建一个按钮事件,在ctest::onbutton()里测试以上两个类的时候出现错误:

我觉得出的错原因是:没有正确实例化cinitapp对象,也没有正确初始化cinitapp的成员m_config;

如何正确实例化含有类的类,以上问题我都非常糊涂,望高手给予明示,我帖出了我的代码,最好能指出代码中的错误和漏洞,总只能让我清

楚实例化含有类的类的问题就行了。万分感谢!
*/

class   cinitconfig    
{
public:
cinitconfig(){m_str= " ";};
virtual   ~cinitconfig();
bool   cinitconfig::init()
{
cfile   f;
cfileexception   e;
dword   dwactual;

char*   pfilename   =   "config/clientconfig.txt ";
f.open(   pfilename,   cfile::moderead,   &e   );
dwactual   =   f.getlength();
m_str.fromat( "%d ",dwactual);
f.close();
delete   pfilename;
};

private:
cstring   m_str;
};


class   cinitapp    
{
public:
cinitapp(){m_config.init();};
virtual   ~cinitapp();
bool   checkapp()
{
bool   temp=false;
if(m_config.m_str   ==   null)
return   temp;

return   true;
};
private:
cinitconfig   m_config;
};


void   ctest::onbutton()
{
cinitapp     iniapp;
if(!iniapp.checkapp())
messagebox( "检测失败! ");
}
发表于:2007-09-18 16:31:481楼 得分:10
char*   pfilename   =   "config/clientconfig.txt ";
f.open(   pfilename,   cfile::moderead,   &e   );
dwactual   =   f.getlength();
m_str.fromat( "%d ",dwactual);
f.close();
delete   pfilename;

file的路径应该是绝对的路径不应该是相对的路径,先获得当前的路径
char   szpath[256];
getcurrentdirectory(256,szpath);
strcat(szpath, "\\ ");
strcat(szpath, "config\\clientconfig.txt ");

f.open(   szpath,   cfile::moderead,   &e   );
dwactual   =   f.getlength();
m_str.fromat( "%d ",dwactual);
f.close();


还有你的  
char*   pfilename   =   "config/clientconfig.txt ";
delete   pfilename   是错误的-   -~!


发表于:2007-09-18 16:43:232楼 得分:0
多谢sangermax(超小户型痞子)   给指出代码中的错误,

还请能给指点下如何正确实例化含有类的类,这个是我最想知道的,
发表于:2007-09-18 16:54:133楼 得分:1
实例化就是...     cinitapp       mobject     实例化对象与栈中,对象可以自动释放,ciniaapp   *pobject   =   new   cinitapp   实例化对象于堆中,需要手动释放   delete   pobject
发表于:2007-09-18 17:01:244楼 得分:2
1.你的程序是可以初始化的.
2.这个没有问题,因为你提供了默认的构造函数.
3.如果想修改一下你的cinitconfig,不提供默认的构造函数,那么你就需要费劲了.
在     cinitapp():
m_config(初始化参数)
{m_config.init();};
发表于:2007-09-18 17:08:275楼 得分:0
明白一点,
还有你的  
char*   pfilename   =   "config/clientconfig.txt ";
delete   pfilename   是错误的-   -~!

上面哪个地方错了,

使用完文件加代码
f.close();第一次点按钮是没事,第二次点按钮有事,跟踪发现是因为文件句柄的   assert错误
void   cfile::close(){
      assert_valid(this);
      assert(m_hfile   !=   (uint)hfilenull);
      ...
}

是怎么回事,谢谢

发表于:2007-09-18 17:17:296楼 得分:2
char*   pfilename   =   "config/clientconfig.txt ";
这里pfilename是常量,不需要delete
发表于:2007-09-18 17:21:457楼 得分:0
明白,

还有关于   文件关闭   f.close();   这个代码第一遍执行后,在下次再打开文件,在关闭,出现断言错误,
void   cfile::close(){
      assert_valid(this);
      assert(m_hfile   !=   (uint)hfilenull);
      ...
}

请问什么原因


快速检索

最新资讯
热门点击