关于CPtrList 问题。。。求解
答案:1 悬赏:70 手机版
解决时间 2021-05-18 03:11
- 提问者网友:夢醒日落
- 2021-05-17 17:56
我有一个结构体保存客户端的SOCKET IP ,每一次ACCETP时候就将其信息保存到CPtrList中,可是我在随后查询 的时候,POSITION pos pos里SOCKET值是不一样,这也是不同的客户端SOCKET,但是他们的IP都是一样的,请问这是为什么。。
最佳答案
- 五星知识达人网友:空山清雨
- 2021-05-17 18:41
//以前遇到差不多的问题,以下的应该可以帮你
用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。 ITPUB个人空间`)kS3F1]2z?2e
ITPUB个人空间_ V*Jv'xjpd
一、在应用程序类中定义
}!et ~o2aV"u.C0ITPUB个人空间X,Nd4pu @_/}8q1\J
用MFC生成的工程中都有一个名为CxxxApp的类,它派生于CWinApp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数,就可以实现全局访问了。
Vjg-yqZ7z0
D!T-fJ'n[.Y!?0 从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得CxxxApp类的指针,所以我们可以在文档、视图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得CxxxApp类的指针,用 “AfxGetApp()->成员”访问变量或函数。ITPUB个人空间.|&Q'l TA:JibRF
%Qv y F,Fn0 例:
/_0u.YYd0ITPUB个人空间0K1If~_
Test.h:(应用程序类头文件)
xt*N}_2~6[8N.y0ITPUB个人空间,n/cx6`p%^q
class CTestApp : public CWinApp
^!o/E@U^O wbR(m h I0{
kY.B3~i5WFrP0 public:
pm'n7x7q0 int x; //全局变量
%Q vv0~Yn0 int f(int y); //全局函数
'dV6aa[K3F2QW0R0 …………
_8m&lk$\@"dV0}; ITPUB个人空间)J{-va*_K6|.d/g.YX
ITPUB个人空间_]I!IE&Z
Test.cpp:(应用程序类程序文件)ITPUB个人空间&F8c ` p)E&s.u
/n HnI @0int CTestApp::f(int y) //全局函数定义
R,?h$tH \ ~]0{
6g-bFd!Xj,Ent0 y++;
%x4G0I(z2J3}#b@{|0 return y; ITPUB个人空间B f'\.ab wH%uT(A
}
?9UK@:MD8?~0ITPUB个人空间.KM9u)d4Q g
定义在CTestApp类中的变量和函数可以在其它类中被访问。比如在视图的某函数中要访问变量x和函数f():ITPUB个人空间1@8vSP2]do
:rq"UTp3kn0void CTestView::xyz()ITPUB个人空间Y-Ar(g"]1l HhJ0d
{ ITPUB个人空间5Ir%yZ(A
CTestApp *app = (CTestApp *)AfxGetApp(); //生成指向应用程序类的指针 ITPUB个人空间3q jiWtpI:q p
app->x = 0; //访问变量x
_(DfeZO?kq0 int z = app->f(1); //访问函数f() ITPUB个人空间'P!oagg'd
…………ITPUB个人空间U[ILWeN4f$w
}
{ ^.{1Xn%G0s;T0
@w`\G"Y)Y&S0 这样,变量x和函数f()可以视作为全局的。
z/nA jH1m"S|)W0
H~!X-w0N.e6AA"[0 用这种方法实现的全局变量和全局函数虽比较简单,但也有缺点,一是访问不太方便,每次都需要获取应用程序类的指针;再就是把一些与应用程序类本身无关的变量和函数放在里面,使这个类看上
用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。 ITPUB个人空间`)kS3F1]2z?2e
ITPUB个人空间_ V*Jv'xjpd
一、在应用程序类中定义
}!et ~o2aV"u.C0ITPUB个人空间X,Nd4pu @_/}8q1\J
用MFC生成的工程中都有一个名为CxxxApp的类,它派生于CWinApp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数,就可以实现全局访问了。
Vjg-yqZ7z0
D!T-fJ'n[.Y!?0 从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得CxxxApp类的指针,所以我们可以在文档、视图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得CxxxApp类的指针,用 “AfxGetApp()->成员”访问变量或函数。ITPUB个人空间.|&Q'l TA:JibRF
%Qv y F,Fn0 例:
/_0u.YYd0ITPUB个人空间0K1If~_
Test.h:(应用程序类头文件)
xt*N}_2~6[8N.y0ITPUB个人空间,n/cx6`p%^q
class CTestApp : public CWinApp
^!o/E@U^O wbR(m h I0{
kY.B3~i5WFrP0 public:
pm'n7x7q0 int x; //全局变量
%Q vv0~Yn0 int f(int y); //全局函数
'dV6aa[K3F2QW0R0 …………
_8m&lk$\@"dV0}; ITPUB个人空间)J{-va*_K6|.d/g.YX
ITPUB个人空间_]I!IE&Z
Test.cpp:(应用程序类程序文件)ITPUB个人空间&F8c ` p)E&s.u
/n HnI @0int CTestApp::f(int y) //全局函数定义
R,?h$tH \ ~]0{
6g-bFd!Xj,Ent0 y++;
%x4G0I(z2J3}#b@{|0 return y; ITPUB个人空间B f'\.ab wH%uT(A
}
?9UK@:MD8?~0ITPUB个人空间.KM9u)d4Q g
定义在CTestApp类中的变量和函数可以在其它类中被访问。比如在视图的某函数中要访问变量x和函数f():ITPUB个人空间1@8vSP2]do
:rq"UTp3kn0void CTestView::xyz()ITPUB个人空间Y-Ar(g"]1l HhJ0d
{ ITPUB个人空间5Ir%yZ(A
CTestApp *app = (CTestApp *)AfxGetApp(); //生成指向应用程序类的指针 ITPUB个人空间3q jiWtpI:q p
app->x = 0; //访问变量x
_(DfeZO?kq0 int z = app->f(1); //访问函数f() ITPUB个人空间'P!oagg'd
…………ITPUB个人空间U[ILWeN4f$w
}
{ ^.{1Xn%G0s;T0
@w`\G"Y)Y&S0 这样,变量x和函数f()可以视作为全局的。
z/nA jH1m"S|)W0
H~!X-w0N.e6AA"[0 用这种方法实现的全局变量和全局函数虽比较简单,但也有缺点,一是访问不太方便,每次都需要获取应用程序类的指针;再就是把一些与应用程序类本身无关的变量和函数放在里面,使这个类看上
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯