头文件
#pragma once
#include <iostream>
using namespace std;
typedef unsigned char uchar;
typedef unsigned short ushort;
class CM_message
{
public:
CM_message();
virtual ~CM_message();
private:
static const int m_ihead_len = 2;
static const int m_imax_body_len = 2048 - 2;
static const int m_iformat_len = 8;
std::size_t m_ibody_len;
std::size_t m_ioff_set;
static const char * const m_szformat_str;
uchar m_szdata[m_ihead_len + m_imax_body_len];
};
实现文件
#include "pch.h"
#include "CM_message.h"
//定义
const char* const CM_message::m_szformat_str = "12345678";
const int CM_message::m_ihead_len;
const int CM_message::m_imax_body_len;
const int CM_message::m_iformat_len;
CM_message::CM_message()
{
std::memset(m_szdata, 0, m_ihead_len + m_imax_body_len);
m_ibody_len = 0;
m_ioff_set = 0;
}
CM_message::~CM_message()
{
}
这里要说的是uchar m_szdata[m_ihead_len + m_imax_body_len];由这个引出static const int m_imax_body_len = 2048 - 2;
有说static const int m_imax_body_len = 2048 - 2;叫声明,在实现文件里的叫定义
如果不在实现文件里进行定义,链接是会报错,实际在VS2017环境里,并没有报错。我发现“我笑痴狂”的博客里也说了linux下用GCC编译,也不会报错。