文件系统项目"Member access into incomplete type"错误

File system project "Member access into incomplete type" error

本文关键字:incomplete type into 错误 access 项目 Member 文件系统      更新时间:2023-10-16

我正在做一个关于 c++ 的文件管理系统项目,但我现在被困住了。

让我想象一下这样的场景:

我有一个DataObject类,它将成为我要创建的其他类(如目录或文件)的父类。在这样的类DataObject我定义了一些日期和参数。当我声明其子类(FileDirectory)时出现问题,因为我在尝试检索下面声明的类的信息时出现错误......我已经在程序顶部定义了3个类(DataObjectDirectoryFile),以便编译器知道这些类的存在。

这是我的代码:

#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;}
};

你能给我一个建议来摆脱这个错误吗?任何形式的帮助将不胜感激。

干杯!

在发生这种情况的地方:

size+=c->getSize();

你只有一个File的前向声明——这很好,只要你只需要一个指向File的指针,但是一旦你需要在File上调用一个方法,编译器就需要知道File到底是什么。

定义紧随此函数之后。 在尝试以这种方式使用它之前,您需要做的只是将File的定义移动到它。 事实上,在这个特定示例中,您看起来根本不需要前向声明。

相关文章: