当类中有静态成员时,以及重复定义原因~

今天因为需要把一个winsock代码封装到C++类中,但是在过程中,遇到了不少问题,都是我以前知道的,但是忘了的。

今天专门好好地写一篇博文,免得以后忘了还要百度。

首先我原来的程序主动创建了3个线程,算上main,一共是4个线程。

封装为C++类后,因为不能因创建的对象而阻塞原程序,所以在需要创建一个替代main的主线程。

这样就是4个线程了,其中2个线程用的是同一个函数。而且这四个线程我只想让我的对象用,对外部应该是不可见的,所以,要封装到类里面。

我前面的一篇博文也说了,类中的函数若想成为线程函数,则必须为静态成员函数。原因就是静态成员函数没有this指针。

这样,类中就要有3个静态成员函数了。

C++中,静态成员函数的基本创建方法:

类中声明:

static DWORD WINAPI ThreadFunction(LPVOID lpParam);

类外声明:

DWORD ClassName::ThreadFunction(LPVOID lpParam){......}

这样就可以了。

另外因为之前线程也使用了全局变量,所以还需要做静态成员变量以继续提供给线程函数使用。

在类中的静态成员变量使用中需要注意的是,如果代码中使用了这个静态成员变量,则改静态成员变量必须要有类外的一次声明,形式如下:

VariableType ClassType::Variable;

但是如果你声明了一个静态成员变量,但是从没有用过,那么,完全用不到这一步。不过,声明了却没使用,是不是,有点2?

所以,最好的方法就是,在你创建了一个静态成员变量后,立即为其做一个类外的声明。

今天我的代码就在这卡住了。

另外一个常见的错误:明明只有一个函数定义,编译器却提示:重复定义。

这个错误基本都由于同一个文件被多次(>= 2)包含,而且你的函数定义代码位于头文件,而不是专门对应的cpp文件。

这个解决方法,要么把函数包含去掉,要么单独建了个文件,把函数定义什么的都扔进去。

Over

posted @ 2013-08-15 16:56  Matrix_R  阅读(3875)  评论(0编辑  收藏  举报