函数原型认为类类型是未定义的,尽管它是在同一个头文件中定义的
Function prototype thinks a class type is undefined, although it's defined in the same header file
似乎在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);
还有其他语法问题,比如析构函数缺少()
,但我假设这是复制粘贴到问题中的问题。我真的不相信这一点,但我将跳过完整的代码审查]
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 我可以重用同一个模板来声明/定义多个东西吗(而不复制模板代码)
- 我是给同一个变量赋值还是重新定义一个新变量
- C++内联函数的定义必须在同一个文件中
- 我可以在同一个.CPP文件中声明和定义静态类变量吗
- C++未定义的引用,尽管函数是在同一个文件中定义的
- 是否有必要在定义中使用模板形参来引用同一个类?
- 未定义的引用错误,即使应该包含的文件在同一个文件夹中