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

Posted

技术标签:

【中文标题】函数原型认为一个类类型是未定义的,尽管它是在同一个头文件中定义的【英文标题】:Function prototype thinks a class type is undefined, although it's defined in the same header file 【发布时间】:2014-06-18 03:47:46 【问题描述】:

似乎在 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

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

【问题讨论】:

IF_ID_WRITE 声明在哪里?它是在哪里定义的? IF_ID_WRITE 类型在您的main 中没有定义,只是该类型变量的实例化。 IF_ID_WRITE 在 Pipeline.h 中声明。我将编辑问题以反映这一点。对不起 @DavidRodríguez-dribeas 我更改了它以反映在 Pipeline.h 中定义的 IF_ID_WRITE @πάνταῥεῖ 对不起,我忘了在我的问题中表明这一点。我已经更新了。 【参考方案1】:

C++ 是一种自顶向下的语言,类型需要在声明使用它的函数之前声明。编译器不会前瞻来试图确定IF_ID_WRITE是否存在于翻译单元的后面,它只会失败,因为它在函数之前不存在声明。

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

class IF_ID_WRITE;
void IF_stage(IF_ID_WRITE& aIF_ID_WRITE);

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

【讨论】:

谢谢!改变顺序就可以了。复制粘贴中的析构函数 () 丢失。我会为任何可能出现并稍后查看的人修复它。再次感谢您的帮助!

以上是关于函数原型认为一个类类型是未定义的,尽管它是在同一个头文件中定义的的主要内容,如果未能解决你的问题,请参考以下文章

友元函数和友元类

TypeError:类是未定义的 ReactComponent。材料套件反应

将字符串向量传递给函数和函数原型问题c ++

原型原型链理解

函数原型函数声明和函数定义之间关系

ionic 3 html按钮链接到.ts中的一个函数,但说它是未定义的