سلام .من کد زیر را نوشتم ظاهراْ همه چیز درسته ولی خوب خطا میده کسی می تونه ابراد کد را پیدا کنه؟
دقیق بخوام بگم خطای زیر را میده:
main.cpp:46:21: error: invalid use of incomplete type ‘struct ILockManager’
#include <stdio.h>
#include <set>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct ILockManager;
struct ILifeSpan{
ILifeSpan(ILockManager* lock_manager):
lock_manager_(lock_manager){
}
~ILifeSpan(){}
virtual void write2Stream() = 0;
virtual void loadFromStream() = 0;
std::string date_;
ILockManager* lock_manager_;
virtual ILockManager* lockManager(){
return lock_manager_;
}
};
struct HLockManager;
struct HLifeSpan : public ILifeSpan{
HLifeSpan(ILockManager* lock_manager):
ILifeSpan(lock_manager){
}
~HLifeSpan(){}
virtual void write2Stream() override{
lock_manager_->write(date_.c_str(),9);
}
virtual void loadFromStream() override{
lock_manager_->read(date_,9);
}
// virtual HLockManager* lockManager(){
// return dynamic_cast<HLockManager*>(lock_manager_);
// }
};
struct ILockManager {
virtual ~ILockManager(){}
void write(const char* value,int length){
ss_.write(value,length);
}
void read(char* value,int length){
ss_.read(value,length);
}
std::stringstream ss_;
void print(){
cout << ss_.str() << endl;
}
ILifeSpan* ls_;
void save(){
ls_->write2Stream();
}
};
template <typename LS>
struct TLockManager : public ILockManager{
TLockManager(){
ls_ = new LS(this);
}
};
struct HLockManager:public TLockManager<HLifeSpan>{
HLockManager():TLockManager<HLifeSpan>(){}
};
int main()
{
HLockManager lock_m;
lock_m.ls_->date_ = "1200/2/2";
lock_m.save();
lock_m.print();
return 0;
}