原文: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
当我把类外的代码部分放在另一个源文件时,不再报错,原因应该如下: