原因如下
问题代码一:
namespace Request{
enum RequestType {
none=0,
camera=1,
screen=2,
cmd=3,
fileop,
cameraData,
screenData,
cmdData,
fileopData
};
char* RequestTypeKey[] = {
"none", "camera", "screen", "cmd", "fileop",
"cameraData", "screenData", "cmdData", "fileopData"
};
}
此代码是定义的Tcp数据传输的数据协议时,作为公共的头文件存在。
编译出现错误:
error: multiple definition of `Request::RequestTypeKey'
解决办法:
在指定 RequestTypeKey 变量为const类型,修改如下:
char* const RequestTypeKey[] = {
"none", "camera", "screen", "cmd", "fileop",
"cameraData", "screenData", "cmdData", "fileopData"
};
原因:在 .h/头文件 中申明变量(全局、成员),不能直接初始化,只能在 .cpp 文件中赋值、初始化。
补充:
ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
解决方法:
const char* const RequestTypeKey[] = {
"none", "camera", "screen", "cmd", "fileop",
"cameraData", "screenData", "cmdData", "fileopData"
};
问题代码一:
#ifndef PTCPSOCKET_H
#define PTCPSOCKET_H
#include <QObject>
class PTcpSocket : public QObject
{
Q_OBJECT
private:
static PTcpSocket* PSocket;
public:
static PTcpSocket* GetInstance();
};
PTcpSocket* PTcpSocket::PSocket = 0;
#endif // PTCPSOCKET_H
此代码是实现单例模式
编译错误:
multiple definition of `PTcpSocket::PSocket'
解决办法:
将PTcpSocket* PTcpSocket::PSocket = 0;放置到 .cpp文件中。在 .cpp 文件中初始化静态变量
原因:在.h文件中不能初始化静态变量
总结
当 在初始化变量(非常量)时,会报multiple definition of错误。注意:.h文件申明变量,在.cpp文件中初始化、赋值、实现。