Я знаю, что есть несколько вопросов относительно этой проблемы, но ни один из них не дает решения под моими ограничениями.ошибка C2027: использование неопределенного типа, с несколькими файлами
Я работаю над проектом, в котором указан заголовочный файл mips_cpu.h
с определенным API. Я намерен разработать его реализацию без изменения файла заголовка. Этот 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 Вы правы, говоря, что определения структуры не обязательно должны быть в заголовках. Однако, когда тип используется в файле, он должен быть виден, то есть к этому файлу. [Struct Def] (http://stackoverflow.com/questions/228684/how-to-declare-a-structure-in-a-header-that-is-to-be-used-by-multiple-files-in -с). –