如何在C ++中用文件编写结构类型的指针

时间:2013-11-23 22:33:01

标签: c++

这是一个c ++代码。我想写一个指向文件中结构的指针。 当我尝试这样做时会产生错误。我做的是>> OBJ1 [0] .contentAdress;在主要。

struct node3{
    node3(){
        nextContent = NULL;
        for (int i = 0; i<1020; i++)
            content[i] = '\0';
    }
    char content[1020];
    node3* nextContent;
};

// --------------------------------------------- ----------------------------------------------

struct node1{
    node1(){
        for (int i = 0; i<496; i++)
            fileName[i] = '\0';
    }

    char fileName[496];
    node3* contentAdress;
};

// --------------------------------------------- ----------------------------------------------

int main(){

    node1 obj1[2097];
    node3 obj3[8192];


        ifstream is("file.txt");
//I want the obj1[0].content Address to be written in file. For that I did:
        **is >> obj1[0].contentAdress;** *THIS GENERATES AN ERROR*

        return 0;
    }

错误:

  

错误C2679:二进制'&gt;&gt;' :找不到哪个操作员需要右手   'node3 *'类型的操作数(或没有可接受的转换)

2 个答案:

答案 0 :(得分:3)

将其转换为uint32(或64位系统上的uint64)。但可能不是你想要的,因为如果需要在文件中写入指针的情况很少。

答案 1 :(得分:1)

发生此错误是因为您没有超载&gt;&gt;要与自定义对象一起使用的运算符。操作员无法知道如何从文件中读取数据结构,反之亦然(它不知道如何将其输出到文件中)。

如果要从文件读取数据结构和向文件写入数据结构,可以使用的一个选项是称为序列化的过程,它采用数据结构并将其转换为可以读取/写入文件的符号(粗略地)

http://en.wikipedia.org/wiki/Serialization

“递归序列化嵌套结构”指的是您的数据结构包含指向同一类型的其他实例的指针,从而创建链。您需要以递归方式遍历所有节点,以获取有关数据结构的所有数据,并能够对其进行序列化。

另请注意,仅将指针地址输出到文件是没有用的,因为无法保证下次运行程序时内存空间中的内容。你绝对必须存储数据。

实现此目标的另一种方法是将数据存储为可读文本,例如XML文件。