私は C++ でファイル管理システム プロジェクトに取り組んでいますが、今行き詰まっています。
シナリオを想像してみましょう:
作成する他のDataObject
クラス (ディレクトリやファイルなど) の親となるクラスがあります。そのようなクラス内DataObject
で、いくつかの日付とパラメーターを定義します。以下で宣言されているクラスの情報を取得しようとするとエラーが発生したため、子クラス ( および )を宣言すると問題がFile
発生します。これにより、コンパイラはこれらのクラスの存在を認識します。Directory
DataObject
Directory
File
これは私のコードです:
#include <iostream>
#include <list>
using namespace std;
class Directory;
class DataObject;
class File;
time_t now;
class DataObject
{
private:
string date_created;
string last_time_accessed;
string last_updated;
string name;
DataObject* parent;
public:
DataObject(string n, DataObject * p)
{
date_created=ctime(&now);
last_time_accessed=ctime(&now);
last_updated=ctime(&now);
name=n;
parent=p;
}
DataObject* getParent() {return parent;}
string getName() {return name;}
string getFullPath()
{
if(getParent()==NULL) return getName();
else return getParent()->getFullPath()+"/"+getName();
}
};
class Directory : public DataObject
{
private:
list<File*> contents;
public:
Directory(string n, Directory * p) : DataObject(n,p) {}
void addDataObject(File & f)
{
contents.push_back(&f);
}
int size()
{
int size=0;
for(File* c: contents)
{
size+=c->getSize(); //error on this line: "Member access to incomplete type "File"
}
return size;
}
void displayContents()
{
list<File*>::iterator myList;
int i=1;
for(myList=contents.begin();myList!=contents.end();myList++)
{
File* aux=*myList;
cout<<i<<" - "<<aux->getName()<<endl; // Error here: Member access to incomplete type "File"
}
}
};
class File : public DataObject
{
private:
int size;
string content="default";
friend class Directory;
public:
File(string n, Directory* p,int s) : DataObject(n,p),size(s)
{
p->addDataObject(*this);
}
int getSize() {return size;}
string getContent() {return content;}
void setContent(string c) {content=c;}
};
このエラーを取り除くための提案を教えてください。あらゆる種類の助けをいただければ幸いです。
乾杯!