BOOL CAssistSliderInfo::UpdateOperationBtnState(const WORD protocolType)
{
switch(protocolType)
{
case CComProtocal::PRO_CHANGE_CTRL_MODE://出错
return TRUE;
break;
case CComProtocal::PRO_TRANS_PHASE://出错
return TRUE;
break;
case CComProtocal::PRO_CHANGE_PHASE_TIME://出错
return TRUE;
break;
default:
break;
} return FALSE;
}class CComProtocal
{
................
..........
public:
static const WORD PRO_CUR_TSCM_RTDATA;
static const WORD PRO_CHANGE_CTRL_MODE
static const WORD PRO_TRANS_PHASE;
static const WORD PRO_CHANGE_PHASE_TIME;
}const WORD CComProtocal::PRO_CUR_TSCM_RTDATA = 10001;
const WORD CComProtocal::PRO_CHANGE_CTRL_MODE= 10027;
const WORD CComProtocal::PRO_TRANS_PHASE = 10028;
const WORD CComProtocal::PRO_CHANGE_PHASE_TIME = 10029;编译的时候就通不过,报错如下:
Compiling...
AssistSliderInfo.cpp
E:Tscm\AssistSliderInfo.cpp(576) : error C2051: case expression not constant
E:Tscm\AssistSliderInfo.cpp(580) : error C2051: case expression not constant
E:Tscm\AssistSliderInfo.cpp(584) : error C2051: case expression not constant
E:Tscm\AssistSliderInfo.cpp(590) : warning C4065: switch statement contains 'default' but no 'case' labels
Error executing cl.exe.
Creating browse info file...
Tscm.exe - 3 error(s), 1 warning(s)我都把那些case后面的表达式都定义成了static const 类型了,为什么编译器不能理解为常量?但是如果把这部分:
switch(protocolType)
{
case CComProtocal::PRO_CHANGE_CTRL_MODE://出错
return TRUE;
break;
case CComProtocal::PRO_TRANS_PHASE://出错
return TRUE;
break;
case CComProtocal::PRO_CHANGE_PHASE_TIME://出错
return TRUE;
break;
default:
break;
}放到CComProtocal的一个成员函数中就不会有任何问题。请问这是怎么回事啊???
{
switch(protocolType)
{
case CComProtocal::PRO_CHANGE_CTRL_MODE://出错
return TRUE;
break;
case CComProtocal::PRO_TRANS_PHASE://出错
return TRUE;
break;
case CComProtocal::PRO_CHANGE_PHASE_TIME://出错
return TRUE;
break;
default:
break;
} return FALSE;
}class CComProtocal
{
................
..........
public:
static const WORD PRO_CUR_TSCM_RTDATA;
static const WORD PRO_CHANGE_CTRL_MODE
static const WORD PRO_TRANS_PHASE;
static const WORD PRO_CHANGE_PHASE_TIME;
}const WORD CComProtocal::PRO_CUR_TSCM_RTDATA = 10001;
const WORD CComProtocal::PRO_CHANGE_CTRL_MODE= 10027;
const WORD CComProtocal::PRO_TRANS_PHASE = 10028;
const WORD CComProtocal::PRO_CHANGE_PHASE_TIME = 10029;编译的时候就通不过,报错如下:
Compiling...
AssistSliderInfo.cpp
E:Tscm\AssistSliderInfo.cpp(576) : error C2051: case expression not constant
E:Tscm\AssistSliderInfo.cpp(580) : error C2051: case expression not constant
E:Tscm\AssistSliderInfo.cpp(584) : error C2051: case expression not constant
E:Tscm\AssistSliderInfo.cpp(590) : warning C4065: switch statement contains 'default' but no 'case' labels
Error executing cl.exe.
Creating browse info file...
Tscm.exe - 3 error(s), 1 warning(s)我都把那些case后面的表达式都定义成了static const 类型了,为什么编译器不能理解为常量?但是如果把这部分:
switch(protocolType)
{
case CComProtocal::PRO_CHANGE_CTRL_MODE://出错
return TRUE;
break;
case CComProtocal::PRO_TRANS_PHASE://出错
return TRUE;
break;
case CComProtocal::PRO_CHANGE_PHASE_TIME://出错
return TRUE;
break;
default:
break;
}放到CComProtocal的一个成员函数中就不会有任何问题。请问这是怎么回事啊???
enum{PRO_CHANGE_CTRL_MODE=100027,...};
class A
{…
A(int pro);
const int PRO_CUR_TSCM_RTDATA;
};
A::A(int pro) : PRO_CUR_TSCM_RTDATA(pro) // 初始化常量
{
…
}
A a1(100); // 对象 a1 的PRO_CUR_TSCM_RTDATA值为100
A a2(200); // 对象 a2 的PRO_CUR_TSCM_RTDATA值为200
如想建立整个类的常量使用enum
class A
{
enum(PRO_CUR_TSCM_RTDATA = 10000...);
}
补充:并且只能是整形常量
{
case 50://
return TRUE;
break;
case 100://
return TRUE;
break;
case 200://
return TRUE;
break;
default:
break;
}
baodi_z(冷冷的太阳) & bobob(静思--潜心研究PDF) ,谢谢!
问题是我已经定义肋static const 了啊,难道还不是常量吗?
要知道我这样使用根本不会有问题:
BOOL CComProtocal::UpdateOperationBtnState(const WORD protocolType)
{
switch(protocolType)
{
case PRO_CHANGE_CTRL_MODE:
return TRUE;
break;
case PRO_TRANS_PHASE:
return TRUE;
break;
case PRO_CHANGE_PHASE_TIME:
return TRUE;
break;
default:
break;
} return FALSE;
}但是在CAssistSliderInfo里像楼顶那样使用就出问题了,
至于寻找解决办法(譬如用enum,或者case后直接用数值等办法我当然知道),我在这里问的问题是想知道为什么会造成这种情况,我的疑问是:在一个类中(如CComPotocal)定义的静态常量,在另一个类(CAssistSliderInfo)看来就不是常量了吗?我感到奇怪!!!
break;//不需要
{
................
..........
public:
static const WORD PRO_CUR_TSCM_RTDATA = 10001;
static const WORD PRO_CHANGE_CTRL_MODE = 10027;
static const WORD PRO_TRANS_PHASE = 10028;
static const WORD PRO_CHANGE_PHASE_TIME = 10029;
}