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

Function prototype thinks a class type is undefined, although it's defined in the same header file

本文关键字:同一个 定义 文件 原型 类型 函数 未定义      更新时间:2023-10-16

似乎在main中声明并在头文件中定义的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
}

显示IF_ID_WRITE被定义在Pipeline.cpp

c++是一种自顶向下的语言,在声明使用该类型的函数之前,需要先声明该类型。编译器不会提前查找,试图找出IF_ID_WRITE是否在翻译单元中存在,它只会失败,因为它在函数声明之前不存在。

如果你重新排序IF_ID_WRITE类型和函数的定义,它应该工作。由于只在头文件中声明函数,因此还可以在函数声明之前提供类型声明(不需要定义):

class IF_ID_WRITE;
void IF_stage(IF_ID_WRITE& aIF_ID_WRITE);
还有其他语法问题,比如析构函数缺少(),但我假设这是复制粘贴到问题中的问题。我真的不相信这一点,但我将跳过完整的代码审查]