100分在线求棘手问题!

ldalong0 2006-02-08 12:42:12
下述源代码可以复制文件中去运行。
现在主要的问题是①②的地方。
请耐下心来看以下程序:
class AAA {
public:
AAA(char *name, char *section, char *key);
virtual ~AAA(void);
protected:
char mName[50];
char mSection[50];
char mKey[50];
};
AAA::AAA(char *name, char *section, char *key)
{
if(name != NULL)
strncpy(mName, name, 50);
if(section != NULL)
strncpy(mSection, section, 50);
if(key != NULL)
strncpy(mKey, key, 50);
}
/////////////////////////////////////////////////////////////////
class BBB : AAA
{
public:
BBB(char *name, char *key, char *section);
virtual ~BBB(void);
private:
int mVal;
};
BBB::BBB(char *name, char *key, char *section):AAA(name, key, section)
{
// do someting..
}
/////////////////////////////////////////////////////////////////
class CCC {
public:
static int Initialize(void);
private:
static AAA mParamArray[500];
};
int CCC::Initialize(void)
{
// ① BBB *obj = new BBB("name", "key" ,"section");
// ② mParamArray[mParamNum++] = new BBB("name", "key" ,"section");
return 0;
}
void main(void)
{
     CCC::Initialize();
}
我想将BBB生成的对象,赋值给 CCC类中 mParamArray(②的操作),但是编译不能通过。
当然通过①可以通过编译。但是我的目的不是这个。①的语法可能不对,大家能帮我指出
改正的方法吗?先谢谢了!
100分 在线等待!!!!
...全文
484 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuizhanjun1981 2006-02-09
  • 打赏
  • 举报
回复
我在这个帖子里散100分,要分的来捧捧场。
http://community.csdn.net/Expert/topic/4546/4546407.xml?temp=5.169314E-02
Leomaxking 2006-02-09
  • 打赏
  • 举报
回复
mark
vc_hunter 2006-02-08
  • 打赏
  • 举报
回复
指针的向上转换不需要强制
逸学堂 2006-02-08
  • 打赏
  • 举报
回复
AAA *obj = new BBB("name", "key" ,"section");// 修改BBB为AAA
mParamArray[mParamNum++] = new BBB("name", "key" ,"section");
vc_hunter 2006-02-08
  • 打赏
  • 举报
回复
能好使才怪。mParamNum没定义。另外楼上说的是关键错误
ldalong0 2006-02-08
  • 打赏
  • 举报
回复
谢谢回复!
按照你的方法改过之后还是编译不能通过,
发生以下错误:
error C2243: 'type cast' : 从'class BBB *' 到'class AAA *' 的变换不可。
逸学堂 2006-02-08
  • 打赏
  • 举报
回复
static AAA mParamArray[500];
这样定义的是对象列表..
应该定义指针列表
如下
static AAA *mParamArray[500];
逸学堂 2006-02-08
  • 打赏
  • 举报
回复

static AAA (*mParamArray1)[500];//这个是2维数组,第二维500,元素AAA
`~`~`~`~`~`~`~
上面的定义一个指针(数组指针)

AAA *mParamArray[500];//这个是一维数组,元素是AAA*
这是定义的一个指针数组.

指针数组,数组指针的区别!
ldalong0 2006-02-08
  • 打赏
  • 举报
回复
谢谢大家的回复!!!
问题基本上解决。
还是这里的高人多啊!特别感谢
ugg(逸学堂(exuetang.net))
dragonzxh(河马MiaMia~柯奶奶和黑爷爷的儿子叫柯南...~)
happy__888([顾问团]寻开心) ( )
谢谢大家!
结贴
逸学堂 2006-02-08
  • 打赏
  • 举报
回复
class BBB : AAA// 修改成为class BBB : public AAA忘记告诉你了
{
public:
BBB(char *name, char *key, char *section);
virtual ~BBB(void){};
private:
int mVal;
};
dragonzxh 2006-02-08
  • 打赏
  • 举报
回复
AAA CCC::*mParamArray[500];=>AAA* CCC::mParamArray[500];
引起错误error LNK2001: unresolved external symbol "private: static class AAA * * CCC::mParamArray" (?mParamArray@CCC@@0PAPAVAAA@@A)
怎么看怎么像AAA CCC::*mParamArray[500];解释成AAA CCC::(*mParamArray)[500];
dragonzxh 2006-02-08
  • 打赏
  • 举报
回复
class BBB:public::AAA{}
寻开心 2006-02-08
  • 打赏
  • 举报
回复
class BBB :public AAA
否则从BBB到AAA的转换不可用
完整的修改看前面给你的代码
ldalong0 2006-02-08
  • 打赏
  • 举报
回复
按照大家所说以下是更改后的程序:
class AAA {
public:
AAA(char *name, char *section, char *key);
virtual ~AAA(void){};
protected:
char mName[50];
char mSection[50];
char mKey[50];
};
AAA::AAA(char *name, char *section, char *key)
{
if(name != NULL)
strncpy(mName, name, 50);
if(section != NULL)
strncpy(mSection, section, 50);
if(key != NULL)
strncpy(mKey, key, 50);
}
/////////////////////////////////////////////////////////////////
class BBB : AAA
{
public:
BBB(char *name, char *key, char *section);
virtual ~BBB(void){};
private:
int mVal;
};
BBB::BBB(char *name, char *key, char *section):AAA(name, key, section)
{
// do someting..
}
/////////////////////////////////////////////////////////////////
class CCC {
public:
static int Initialize(void);
private:
static AAA (*mParamArray)[500];
static int mParamNum;
};
int CCC::mParamNum = 0;
AAA CCC::*mParamArray[500];

int CCC::Initialize(void)
{
//① AAA *obj = new BBB("name", "key" ,"section");
//② mParamArray[mParamNum++] = new BBB("name", "key" ,"section");
return 0;
}
void main(void)
{
CCC::Initialize();

}
按照ugg(逸学堂(exuetang.net))所说,①②还是不能过不去;
error C2243: 'type cast' :从 'class BBB *' 到 'class AAA *' 変換不可
error C2440: '=' :从 'class BBB *' 到 'class AAA [500]' 変換不可

寻开心 2006-02-08
  • 打赏
  • 举报
回复
class AAA {
public:
AAA(char *name, char *section, char *key);
virtual ~AAA(void){}; ///// 1
protected:
char mName[50];
char mSection[50];
char mKey[50];
};
AAA::AAA(char *name, char *section, char *key)
{
if(name != NULL)
strncpy(mName, name, 50);
if(section != NULL)
strncpy(mSection, section, 50);
if(key != NULL)
strncpy(mKey, key, 50);
}
/////////////////////////////////////////////////////////////////
class BBB : public AAA /////// 2
{
public:
BBB(char *name, char *key, char *section);
virtual ~BBB(void){}; ////// 3
private:
int mVal;
};
BBB::BBB(char *name, char *key, char *section):AAA(name, key, section)
{
// do someting..
}
/////////////////////////////////////////////////////////////////
class CCC {
public:
static int Initialize(void);
static int mParamNum; ///// 4
private:
static AAA* mParamArray[500]; //// 5
};

int CCC::mParamNum = 0; ///// 6
AAA* CCC::mParamArray[500]; ///// 7

int CCC::Initialize(void)
{
mParamArray[mParamNum++] = new BBB("name", "key" ,"section");
return 0;
}

void main(void)
{
CCC::Initialize();
};
dragonzxh 2006-02-08
  • 打赏
  • 举报
回复
static AAA (*mParamArray1)[500];
那么初始化的时候
AAA CCC::*mParamArray[500];
是正确的.
==========================
static AAA (*mParamArray1)[500];//这个是2维数组,第二维500,元素AAA

AAA *mParamArray[500];//这个是一维数组,元素是AAA*
不太一样吧。。。。。
dragonzxh 2006-02-08
  • 打赏
  • 举报
回复
AAA CCC::*mParamArray[500];
================
我说的4不像是说
1:像类的函数指针,比如AAA CCC::*Foo(int);
2: 像2维数组指针, 比如AAA CCC::(*p)[500]
逸学堂 2006-02-08
  • 打赏
  • 举报
回复
这可不是44不像啊!
如果在类中是定义下面这种方式
static AAA (*mParamArray1)[500];
那么初始化的时候
AAA CCC::*mParamArray[500];
是正确的.

关键是这哥俩长的比较象,一步留神就出错啊!反思中......
static AAA *mParamArray1[500];//// 1
static AAA (*mParamArray1)[500];//// 2
这两个长的太象了.
不小心按2形式定义写了!
dragonzxh 2006-02-08
  • 打赏
  • 举报
回复
AAA CCC::*mParamArray[500];
-----------------------------
很漂亮的4不像,哈哈哈哈。。。
逸学堂 2006-02-08
  • 打赏
  • 举报
回复
刚才犯晕了......
居然写成
AAA CCC::*mParamArray[500];
我说怎么编译不过去!
千万别学..
加载更多回复(6)

64,636

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧