| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1669 人关注过本帖
标题:急:请教一个有关常数据成员的问题
只看楼主 加入收藏
thunderxu
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-4-27
收藏
 问题点数:0 回复次数:11 
急:请教一个有关常数据成员的问题
小弟是一个初学者,遇到一个问题自己一直不能解决,希望哪位高手能够帮助我。
我定义了一个类
class A
{public:
const int L,M;
A(int, int);
double F[L][M],P[L][M];
………………………………

private:
double Q[L][M];
…………………………
};

A::A(int i, int j):L(i),M(j){}

同时,又有:
class B:private A
{
public:
B(int i, int j):A(i, j){}
………………
public:
double QQ[L][M];
………………
};
这两个类是分别写在两个文件上的。同时,class A和class B分别写在两个头文件中(A.h&B.h),成元函数分别写在两个cpp文件中(A.cpp&B.cpp),且在开头分别对应#include "A.h", #include "B.h"

然后:
#include "A.cpp"
#include "B.cpp"

main
{
B BM(20,30);
…………………… //定义,调用成元函数和数据
}

但是在我complie 的时候却出现:
error C2327: 'A::L' : member from enclosing class is not a type name, static, or enumerator
……\A.h(17) : error C2065: 'L' : undeclared identifier
……\A.h(17) : error C2057: expected constant expression
……\A.h(17) : warning C4200: nonstandard extension used : zero-sized array in struct/union
……\A.h(17) : error C2327: 'A::M' : member from enclosing class is not a type name, static, or enumerator
……\A.h(17) : error C2065: 'M' : undeclared identifier
……\A.h(17) : error C2057: expected constant expression
……\A.h(17) : error C2229: class 'A' has an illegal zero-sized array
……\A.h(17) : warning C4200: nonstandard extension used : zero-sized array in struct/union

这是怎么回事呢??希望哪位高手能尽快解答!不胜感激!
搜索更多相关主题的帖子: 成员 
2006-04-27 22:24
jedimaster
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2006-3-31
收藏
得分:0 
数据最好是私有成员,不要是公有的,否则类成员函数还有什么用。再说声明为const 也不好你怎么初始化呢?如果想用const这样试一下

private:
static const int L=...; \\取值你自己定
static const int M=....;
因为只有静态类成员变量才能在类定义中初始化。
再定义公共类成员函数提供对它们的访问,类本来是一种封装,对数据进行保护,通过接口(类成员函数)进行访问。
2006-04-27 22:36
jedimaster
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2006-3-31
收藏
得分:0 
刚才又仔细看了看,你是用这两个常量去定义一个double数组。
不如这样:
const int L=...;
const int M=...;
class A
{
private:
Q[L][M];
}
就成了。
2006-04-27 22:42
jedimaster
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2006-3-31
收藏
得分:0 
哦是
double Q[L][M];
2006-04-27 22:43
jedimaster
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2006-3-31
收藏
得分:0 
L M不必是类成员。另外还有一个问题,你的Q[L][M]是类的私有成员,但却不在构造函数里初始化,反而去初始化L,M有点本末倒置。
2006-04-27 22:47
thunderxu
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-4-27
收藏
得分:0 
因为Q[L][M]其实是通过类内的成员函数记算算出来的,所以就没有对其进行初始化。对于L和M,因为它控制数组的大小,同时数组的大小对于不同的情况,我想让他成为一个可变量,让用户输入数值,所以才这么做的。我想让L、M成为形参,然后在定义对象的时候由用户给出。不知道如果想实现这种功能怎么办好呢?
2006-04-28 07:43
jedimaster
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2006-3-31
收藏
得分:0 
即便是计算出来的也应该在构造函数中初始化,全部取0也好。如果你想令L,M是变化的就不要用const,那就得用动态内存分配,不过你是初学者,处理起来不方便.而且即便用了动态内存分配第二维参数也必须是常量.最好的做法是让L,M取比较大一点的值,保留一定的冗余,用的时候就视具体情况而使用数组的某一部分.
2006-04-28 08:56
thunderxu
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-4-27
收藏
得分:0 
多谢了!
2006-04-28 14:34
thunderxu
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-4-27
收藏
得分:0 
但是在我改为const int L=…,M=…以后,为什么还出现
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'L' : pure specifier can only be specified for functions
error C2258: illegal pure syntax, must be '= 0'
error C2252: 'M' : pure specifier can only be specified for functions
error C2258: illegal pure syntax, must be '= 0'
2006-04-28 16:17
jedimaster
Rank: 1
等 级:新手上路
帖 子:117
专家分:0
注 册:2006-3-31
收藏
得分:0 
你给L,M赋值了吗不是写成...了吧?那是省略。因为我不知道你要取多大的值。
2006-04-28 16:33
快速回复:急:请教一个有关常数据成员的问题
数据加载中...
 
   



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

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