函数原型认为类类型是未定义的,尽管它在同一个头文件中定义

时间:2014-06-18 03:47:46

标签: c++ class prototype

似乎在主文件中声明并在头文件中定义的IF_ID_WRITE类对象在同一头文件中的函数原型中无法识别。当我将原型从Pipeline.h移动到Project.cpp时,它编译得很好,但我不想诉诸于此。

我需要更改什么才能识别Pipeline.h中的对象类型?

编译时,我得到以下三个错误:
错误C2065:' IF_ID_WRITE' :未声明的标识符
错误C2065:' aIF_ID_WRITE' :未声明的标识符
错误C2182:' IF_stage' :非法使用类型' void'

Pipeline.h文件包含
    #include <cstdlib>
    #include <iomanip>
    #include <iostream>
    using namespace std;
    #pragma once

//function prototypes
void IF_stage(IF_ID_WRITE &aIF_ID_WRITE);

//IF_ID_WRITE defined
class IF_ID_WRITE {
private:
    int inst;
    int writeRegNum;
    int readReg1Num;
    int readReg2Num;
    int offset;
    int incrPC;
public:
    IF_ID_WRITE();
    void setWriteRegNum(int);
    void setReadReg1Num(int);
    void setReadReg2Num(int);
    ~IF_ID_WRITE()
};

Project.cpp包含
    #include <cstdlib>
    #include <iomanip>
    #include <iostream>
    #include "Pipeline.h"
    using namespace std;
    #pragma once

int main(){
.
.
.
IF_ID_WRITE aIF_ID_WRITE;      //creating an object called aIF_ID_WRITE of type IF_ID_WRITE
IF_stage(aIF_ID_WRITE);        //a function that will pass the object by reference

在Pipeline.cpp文件中:
    void IF_stage(IF_ID_WRITE& aIF_ID_WRITE)
    {
    //code
    }

编辑以显示在Pipeline.cpp中定义的IF_ID_WRITE

1 个答案:

答案 0 :(得分:2)

C ++是一种自上而下的语言,在声明使用它的函数之前,类型需要声明。编译器不会预测试图弄清楚IF_ID_WRITE以后是否存在于翻译单元中,它只会失败,因为它不会存在于函数声明之前。

如果您重新排序IF_ID_WRITE类型的定义及其应该起作用的功能。由于您只是在标题中声明了该函数,因此您还可以在函数声明之前提供类型声明(不需要 definition ):

class IF_ID_WRITE;
void IF_stage(IF_ID_WRITE& aIF_ID_WRITE);

[还有其他语法问题,例如析构函数缺少(),但我假设这是复制粘贴到问题中的问题。我不相信这一点,但我会跳过完整的代码审查]