问题一
在使用继承时,遇到下面的问题
error: ‘void BaseServer::StartServer(BaseServer*)’ is inaccessible
void StartServer(BaseServer *m_bserver);即父类无法调入子类参数,原因竟是继承时忘记加
public
导致私有继承问题二
在c中常常使用一个总头文件来定义全局变量,如果只在总头文件中声明,然后在其他头文件中
include
,使用时会出现多次定义的错误。至少应该在.c中定义初始化,在头文件中使用extern。或者通过类的实例,类与类之间的关系来访问。问题三
在linux下创建线程时,创建线程的函数与c++的语法冲突(c++相对于c语法更加严格一些)
pthread_create(&pthread_id, NULL, ServerThread, NULL)
(error: invalid conversion from ‘void*’ to ‘void* ()(void)’)解决办法,将线程函数设置为c,不在类中定义。即ServerThread设置为c函数,声明时加
#ifdef __cplusplus extern "C" { #endif static void *ServerThread(void *); #ifdef __cplusplus } #endif //(void *)也必须添加
问题四
关于静态变量的声明和定义。静态成员属于全局变量,是所有实例化以后的对象所共享的,而成员的初始化可以想象成向系统申请内存存储数据的过程,显然这种共有对象不能在任何函数和局部作用域中初始化。也不能在.h中初始化,必须在.cpp中初始化。
//.h class BaseServer { private: static int connfd; //declaration static variable and defin