У меня есть рабочий интерфейс для двух программ (ProgramA
и ProgramB
), которые я бы хотел улучшить, насколько это возможно, для разделения обеих программ.Случай, который я хочу охватить, - это вызов из ProgramA
класса из ProgramB
(Compute_Prop
), который может быть инициализирован только с некоторыми аргументами, которые я сейчас не делаю заранее.Следовательно, я использую указатель в заголовке.В настоящее время у меня есть что-то вроде этого:
interface.h
#include "programB.h" // loads Compute_Prop
class Compute {
public:
Compute();
Compute(targ1 arg1, targ2 arg2);
~Compute();
// some methods ...
private:
Compute_Prop* compute;
};
interface.cpp
#include "programB.h"
#include "interface.h"
#include "programA.h"
Compute::Compute() = default;
Compute::~Compute() {
delete compute;
}
Compute::Compute(arg1, arg2) {
// do something ... to get data
compute = new Compute_Prop( &data, arg2 );
}
Затем я пытаюсь имитировать идиому PIMPL со следующим
interface.h
#include "programB.h" // loads Compute_Prop
class Compute {
public:
Compute();
Compute(targ1 arg1, targ2 arg2);
~Compute();
// some methods ...
private:
class PIMPL;
PIMPL* compute;
};
interface.cpp
#include "programB.h"
#include "interface.h"
#include "programA.h"
Compute::PIMPL = Compute_Prop;
Compute::Compute() = default;
Compute::~Compute() {
delete compute;
}
Compute::Compute(arg1, arg2) {
// do something ... to get data
compute = new Compute_Prop( &data, arg2 );
}
но компилятор говорит:
error: expected unqualified-id
Compute::PIMPL = Compute_Prop;
^
Я предполагаю, что это как-то связано с тем, что Compute_Prop не имеет пустого конструктора.Я не могу придумать что-то, что работает.Что я должен делать?Может быть, что-то вроде указателя на указатель?В качестве ограничения я не могу изменить programB
.
Примечание. Как, вероятно, уже ясно из приведенного выше, мое понимание низкого уровня C ++ / C является недостаточным.
РЕДАКТИРОВАТЬ: я представил исправления, предложенные @nm и @Matthieu Brucher