C++问题-multiple definition of

原因如下


问题代码一:

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文件中初始化、赋值、实现。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值