У меня проблема, когда кажется, что файл реализации распознает только предварительное объявление другого класса, а не его фактическое объявление. Я пытался использовать различные охранники с импортом и удалять предварительную декларацию, но безрезультатно.
Класс A имеет функцию "decode", которая принимает один аргумент типа B, определенный в отдельном файле. Я хотел бы сохранить все файлы .h и .cpp в виде отдельных файлов. Они здесь.
A.h:
class B;
class A{
private:
string sentence;
public:
A();
void decode(const B& decoder);
};
B.h:
class B{
private:
int code[26];
public:
B();
int getCode(int index);
};
A.cpp:
#include "A.h"
A::A(){}
double A::decode(const B& decoder){
B.getCode(1);
//other things
}
Б.цпп:
#include "B.h"
B::B(){}
int B::getCode(int index){};
и водитель:
#include "B.h"
#include "A.h"
using namespace std;
int main(int argc, char* argv[]){
B myB;
A myA;
myA.decode(B);
}
Я компилирую это с помощью g++ -Wall driver.cpp B.cpp A.cpp, но получаю ошибку, которая выглядит так:
Ошибка A.cpp:4: недопустимое использование неполного типа "const class B"
Я просмотрел массу подобных тем, пытаясь найти ответ, но у меня пока ничего не получилось. Любые идеи?
#include "B.h"
в A.cpp. - person R Sahu   schedule 05.02.2018