文件系统项目"Member access into incomplete type"错误
File system project "Member access into incomplete type" error
我正在做一个关于 c++ 的文件管理系统项目,但我现在被困住了。
让我想象一下这样的场景:
我有一个DataObject
类,它将成为我要创建的其他类(如目录或文件)的父类。在这样的类DataObject
我定义了一些日期和参数。当我声明其子类(File
和 Directory
)时出现问题,因为我在尝试检索下面声明的类的信息时出现错误......我已经在程序顶部定义了3个类(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;}
};
你能给我一个建议来摆脱这个错误吗?任何形式的帮助将不胜感激。
干杯!
在发生这种情况的地方:
size+=c->getSize();
你只有一个File
的前向声明——这很好,只要你只需要一个指向File
的指针,但是一旦你需要在File
上调用一个方法,编译器就需要知道File
到底是什么。
定义紧随此函数之后。 在尝试以这种方式使用它之前,您需要做的只是将File
的定义移动到它。 事实上,在这个特定示例中,您看起来根本不需要前向声明。
相关文章:
- std::unordered_map 类型对象声明期间出现"field has incomplete type"错误
- 尝试打开 ifstream 时出现"Incomplete type"错误
- reference_wrapper导致"incomplete type is not allowed"
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 结构中的错误"Incomplete type is not allowed"
- 模板类和'invalid use of incomplete type'错误
- "invalid use of incomplete type" .解决循环依赖关系
- 我需要在不使用前向声明的情况下相互包含两个头文件,导致"incomplete type"错误
- "Field has incomplete type"引用自己的类的问题
- 'Incomplete type'在VS中使用glm::vec3和ReSharper时的警告
- C++ - "Incomplete type not allowed"错误是什么意思,我该如何修复它?
- 无法运行简单的 std::async 和 std::future 测试程序。错误:"has initializer but incomplete type."发生了什么?
- 在 Solaris 机器上使用 SUN C++ 进行编译时"Error: incomplete type "无符号字符 [] " "
- 模板尾部结构抬高"incomplete type in nested name specifier"
- 浮子阵列抛出"incomplete type is not allowed"
- 类类型的"Incomplete type isn't allowed"数组
- 访问类引用信息的 C++ "Incomplete type not allowed"错误(具有前向声明的循环依赖项)
- C++错误:" 'class' does not name a type"和"invalid use of incomplete type ‘struct ...' "
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 头文件类成员函数声明错误:"incomplete type name in nested name specifier"