MFC在选项卡TabControl中定义下拉列表ComboBox如何在主Dlg中初始化,error C2352非静态成员函数的非法调用,error C2228的左边必须有类/结构/联合,已解决

问题及原因

设计一款软件经常会遇到在一个选项卡(TabControl)中添加一些东西,然后需要初始化。我在做现在的项目的时候就需要在一个选项卡中添加下拉列表(ComboBox):

众所周知,初始化某一个ComboBox的时候需要Add String:

void Other1::Other1Init()
{	
	CTRL_1.AddString(_T("22"));
	CTRL_1.AddString(_T("0"));
	CTRL_1.AddString(_T("-20"));
	CTRL_1.SetCurSel(1);   //默认选择0

}

但是Tab Control的类和主界面的类在两个文件,在使用如下形式调用此Other1Init函数时,出现:

严重性错误    C2352    “OtherParaCtrl::OtherParaCtrlInit”: 非静态成员函数的非法调用  

BOOL CC1Dlg::OnInitDialog()
{
    Other1::Other1Init();
}

原因是其他文件不可以调用非static的public函数,于是将Other1Init的函数声明前面加了static:

此时在主窗口初始化的位置可以用 Other1::Other1Init();调用次函数了,但是在 Other1.c、 Other1.h文件中定义的ComboBox变量,由于自己所在的函数是static的而自己不是static的,又出现了:

严重性    错误    C2228    “.Combo Box1”的左边必须有类/结构/联合

严重性   错误(活动)        非静态成员引用必须与特定对象相对    

解决方法

在主窗口头文件中实例化Other1为m_Other1,通过m_Other1.Other1Init();的方法进行调用:

猜你喜欢

转载自blog.csdn.net/Mr_liu_666/article/details/107147078