【发布时间】:2015-10-22 15:58:54
【问题描述】:
我知道关于这个问题有多个问题,但在我的限制下没有一个提供解决方案。
我正在做一个项目,其中给出了具有特定 API 的头文件 mips_cpu.h。我打算在不更改头文件的情况下开发它的实现。此 API 包含在文件 mips_cpu.cpp 中声明的结构:
struct mips_cpu_impl;
typedef struct mips_cpu_impl *mips_cpu_h;
然后我在mips_cpu.cpp 中将这个结构定义为:
struct mips_cpu_impl{
//Program Counter
uint32_t pc;
uint32_t pcN;
//General Purpose Registers
uint32_t GPReg[32];
//Special registers for MUL / DIV instructions
uint32_t LO;
uint32_t HI;
----- more code ---
};
在另一个文件mips_cpu_instruction.cpp 中使用此结构时会出现问题。当我有这个代码时:
mips_error ADDI(mips_cpu_h state, uint8_t rs, uint8_t rt, uint16_t imm){
uint64_t check = state->GPReg[rs] + imm;
uint32_t tmp = state->GPReg[rs] + imm;
...
more code and appropriate return
}
state 然后报错:use of undefined type 'mips_cpu_imps'
在头文件中包含结构的声明可以解决问题,但我不应该更改头文件。头文件还包含警卫,我不完全理解但可能相关?
【问题讨论】:
-
文件
mips_cpu_instruction.cpp是你编码的吗?如果是这样,你为什么要使用mips_cpu_impl?你可能不需要。这肯定是一个pimpl -
结构定义不必在标题中。
-
@molbdnilo 你说得对,结构定义不必在标题中。但是,当在文件中使用类型时,它必须是可见的,即对该文件可见。 Struct Def.
-
@PaoloM 是的,但它需要使用给定的结构声明来模拟 MIPS cpu
-
您使用哪种语言? C 还是 C++?
标签: c++ c undefined header-files include-guards