C++头文件和源文件的写法 error: multiple definition

原文:https://www.cnblogs.com/ider/archive/2011/06/30/what_is_in_cpp_header_and_implementation_file.html

技术不好就会各种非法操作坑自己呢>.<关于头文件和源文件的写法,今天第二次遇到了问题,第一次是模板类的函数的声明和定义最好不要分开写,否则相当麻烦,这次是全局函数不要放在头文件里实现(g++编译器会报错,不过clang不会),正好在网上找到了比较详细的解答,如上。
先贴错误场景吧,哭泣ing。注意这里inline函数没有报错。

这里写图片描述
而源码是这样的

#ifndef PCB_H
#define PCB_H

#include<QString>
#include<QList>
//using namespace std;

class PCB{
public:
    double pid;
    double runtime;
    double priority;
    QString state;//(waiting, ready_a, running, terminate, block_a)(ready_s, block_s)
    double memsize;
    double startaddr;

    PCB() {}
    PCB(double rt, double pri,double mem,double staddr)
        :runtime(rt), priority(pri) ,memsize(mem),startaddr(staddr){
        pid = TIMESTAMP++;
        state = "waiting";

    }
    static int READY;   //就绪队列进程个数
    static int EXMEM;   //外存进程个数
    static int POOL;    //后备队列进程个数
    static int TIMESTAMP;//时间戳
};

QList<PCB>pool;
QList<PCB>ready;
QList<PCB>suspend;
//void Init();
//void Insert();
//void PoolToReady();
//void ProScheduling();
//void Display();
//void Revoke(int i);
int PCB::READY=0;
int PCB::EXMEM=0;
int PCB::POOL=0;
int PCB::TIMESTAMP=0;

inline void Init() {}

inline void Insert() {}

void PoolToReady() {}

void ProScheduling() {}

void Display() {}

void Revoke(int i) {}

#endif // PCB_H

当我把类外的代码部分放在另一个源文件时,不再报错,原因应该如下:
这里写图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值