hur.cn - 华软网

 热门搜索

static const的问题

  作者:未知    来源:网络    更新时间:2009/7/3
class mystr
{
private:
public:  
    static  const int  strNum;
    mystr();
    CString m_str[strNum];

};

const int mystr::strNum=10;

各们这样为什么不可以?strNum不是在定义类的时候就分配全局内存了吗??
---华软 网友回答---
#include   <iostream>
#include   <string>


using   namespace   std;

class   A
{
public:
    static   const     int   i;
    A();  
    
private:
    
};
const A::i=12;//类变量要在类外边初始化
A::A()
{
    
};  


void   main()
{  
    

---华软网友回复---
是在类外定义并初始化的。
---华软网友回复---
楼主的完全可以,没有错误。
---华软网友回复---
引用 3 楼 zhihuizhilv 的回复:
楼主的完全可以,没有错误。


可以编辑的时候有错误,主要是 CString m_str[strNum];   这里,用这个静态常量定义数组的个数
---华软网友回复---
你把
CString m_str[strNum];
放在
const int mystr::strNum=10; 
之后就可以了。

也就是说,在编译的时候,一定要初始化在前,使用在后。
---华软网友回复---
那就这样吧
C++">
class mystr
{
private:
public:
    static  const int  strNum = 10;
    mystr();
    CString m_str[strNum];

}; 

---华软网友回复---
引用 6 楼 wozhaolala 的回复:
那就这样吧
C/C++ code
class mystr
{
private:
public:
    static  const int  strNum = 10;
    mystr();
    CString m_str[strNum];

}; 


出了很多错误,

 : error C2258: illegal pure syntax, must be '= 0'
 : error C2252: 'strNum' : pure specifier can only be specified for functions
 : error C2065: 'strNum' : undeclared identifier
 : error C2057: expected constant expression
 : warning C4200: nonstandard extension used : zero-sized array in struct/union
 : error C2039: 'strNum' : is not a member of 'mystr'
 : see declaration of 'mystr'
constTest.cpp
 : error C2258: illegal pure syntax, must be '= 0'
 : error C2252: 'strNum' : pure specifier can only be specified for functions
 : error C2065: 'strNum' : undeclared identifier
 : error C2057: expected constant expression
: warning C4200: nonstandard extension used : zero-sized array in struct/union
Generating Code...
Error executing cl.exe.
Creating browse info file...

dlg.exe - 9 error(s), 2 warning(s)

---华软网友回复---

const int  strNum = 10;//或者这样 #define strNum 10
class mystr
{
private:
public:
    mystr();
    CString m_str[strNum];

}; 


---华软网友回复---
引用 8 楼 djj315 的回复:
const int  strNum = 10;//或者这样 #define strNum 10 
class mystr 

private: 
public: 
    mystr(); 
    CString m_str[strNum]; 

}; 


 这样是可以的,但这就定义成全局变量了,
class mystr 

private: 
enum{e1=10,e2=20};
public: 
    mystr(); 
    CString m_str[e1]; 
};
这样也可以


现在的目的就是想定义为这个类的静态常量,只在类内作用范围。

---华软网友回复---
这样写没错的,错在其他原因
---华软网友回复---
你是不是类外面用了strNum?
如果是的话mystr::strNum用
---华软网友回复---
引用 6 楼 wozhaolala 的回复:
那就这样吧
C/C++ code
class mystr
{
private:
public:
    static  const int  strNum = 10;
    mystr();
    CString m_str[strNum];

}; 



怎么会没有错误呢??

静态成员变量初始化根本就不能在类内部初始化。
---华软网友回复---
CString m_str[strNum];
改成CStringArray m_strArr;吧

---华软网友回复---
const int 可以的
---华软网友回复---
static int 不可以
static const int 可以的
---华软网友回复---
引用 14 楼 wozhaolala 的回复:
const int 可以的


const int 好像也不可以的。
const int的初始化也不能放在类的定义中,只能放在初始化列表中。
---华软网友回复---
引用 15 楼 wozhaolala 的回复:
static int 不可以 
static const int 可以的


老大,不知道就不要乱说了。static 成员变量,不可以在类的定义中初始化,不管是 static int 还是static const int。
---华软网友回复---
引用 16 楼 org200820082008 的回复:
引用 14 楼 wozhaolala 的回复:
const int 可以的


const int 好像也不可以的。
const int的初始化也不能放在类的定义中,只能放在初始化列表中。

const int 是不可以,不过其实我是想说 前面加个static 的 const int是可以的,呵呵,你试了没有,static const int sc_nNum = 10我都用了好多年了
---华软网友回复---
老大,static const int sc_nNum = 10。这样在类的定义中,真的不行,还是有错误的。不知道你用的是什么编辑器,我用的是VC6.0是不可以的。
---华软网友回复---
在类里面直接初始化,在.cpp 里面就不要初始化去。删掉.cpp里面看看,也许就不报错了,
---华软网友回复---
1。你的初始化赋值操作写在cpp文件里面了吗?
头文件会被包含很多次,相当于会有很多重定义!
2。常量作为数组大小应该是可行的。
3。类声明里面,常量使用先于声明应该可行。至少VC可以。
---华软网友回复---
啊偶,也许吧,我用的是vc9,我装vc6看看,呵呵
---华软网友回复---
引用 22 楼 wozhaolala 的回复:
啊偶,也许吧,我用的是vc9,我装vc6看看,呵呵


期待中………,我试过很多次都失败了
---华软网友回复---
引用 6 楼 wozhaolala 的回复:
那就这样吧
C/C++ code

class mystr
{
private:
public:
    static  const int  strNum = 10;
    mystr();
    CString m_str[strNum];

}; 


你想这样啊,那真是没有办法了。
首先,不能在类的声明里面为变量初始化。

如果是这样,倒是可以:
class CA
{
public:

static const int s_i;

void Func();
protected:
private:
};

const int CA::s_i = 10;

void CA::Func()
{
int arrI[s_i];
}

不过想用静态整形常量作为其他数组类型的成员变量的下标,我不知道怎样才能在使用之前初始化它。

这条路行不通,建议使用其他方法吧。
---华软网友回复---
引用 22 楼 wozhaolala 的回复:
啊偶,也许吧,我用的是vc9,我装vc6看看,呵呵


老大,VC6可不可以?如果你那可以的话,那我的编辑器可真的是有问题了。期待您的证实……
---华软网友回复---
还是使用动态分配生成一个数组吧,比这个也麻烦不了多少。
实在想不出用这种思路怎么解决,不想钻牛角尖了。
---华软网友回复---
搂主,果然如此。
---华软网友回复---
vc6行不通。
---华软网友回复---
引用 24 楼 zhihuizhilv 的回复:
引用 6 楼 wozhaolala 的回复:
那就这样吧 
C/C++ code 

class mystr 

private: 
public: 
    static  const int  strNum = 10; 
    mystr(); 
    CString m_str[strNum]; 

}; 



你想这样啊,那真是没有办法了。 
首先,不能在类的声明里面为变量初始化。 

如果是这样,倒是可以: 
class CA 

public: 

static const int s_i; 

void Func(); 
protected: 
private: 
}; 

co…






您说的,和我现在了解的基本差不多:
1)类定义内不可以初始化static 、const、static const成员变量
2)想用类的静态常量成员 作为其他数组类型的成员变量的下标,实在不可行。感觉他们的初始化相冲突,初始化这个了那个没初始化。
3)可以使用 enum实现这个想法。



---华软网友回复---
静态变量应该在类外定义!
---华软网友回复---
VC6.0不支持static const 类的静态常数据成员,必须使用enmu;vs是可以的      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。