我知道有關於此問題的多個問題,但是沒有一個在我的約束下提供解決方案。錯誤C2027:使用未定義類型,有多個文件
我正在開發一個項目,其中給出了具有特定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
然後給出了錯誤:使用未定義的類型「mips_cpu_imps」
包括在頭文件結構的聲明解決了這個問題,但我不應該改變頭文件。另外頭文件包含警衛,我不完全理解,但可能是相關的?
你編碼的文件'mips_cpu_instruction.cpp'?如果是這樣,爲什麼你會使用'mips_cpu_impl'?你可能不需要。這是一個* pimpl *肯定 –
結構定義不一定要在標題中。 – molbdnilo
@molbdnilo你說得對,結構定義不一定要在標題中。但是,當文件中使用類型時,它必須是可見的,即該文件。 [結構定義](http://stackoverflow.com/questions/228684/how-to-declare-a-structure-in-a-header-that-is-to-be-used-by-multiple-files-in -C)。 –