C++ 将文件读入struct';s、 然后分类

C++ 将文件读入struct';s、 然后分类,c++,arrays,file,C++,Arrays,File,编辑:好的,在我下面帖子的帮助下,我把它编译好了。我将将将文件读入数组的行更改为: input->read((char*)( &(zip[i].postalCode) ), sizeof(int )); input->read((char*)( &junk ), sizeof(int )); input->read((char*)( &(zip[i].longitude) ), size

编辑:好的,在我下面帖子的帮助下,我把它编译好了。我将将将文件读入数组的行更改为:

    input->read((char*)( &(zip[i].postalCode) ), sizeof(int    ));
    input->read((char*)( &junk ),               sizeof(int     ));
    input->read((char*)( &(zip[i].longitude)  ), sizeof(double  ));
    input->read((char*)( &(zip[i].latitude)   ), sizeof(double  ));
    cout << "Currently at position" << input->tellg() << endl;
原文如下:

我又回来了。A有一个结构和两个函数:

    struct zipType{
        int postalCode;
        double longitude;
        double latitude;  
    };

    void zipToCout(zipType zip){
        cout << "Postal Code = " << zip.postalCode << "\tLongitude = " << zip.longitude << "\t\tLatitude = " << zip.latitude << endl;
    }

    void binRead(zipType *zip[], fstream *input){
        int junk;
        int count;
        int end;
        input->seekg(0,ios::end);
        end=input->tellg();
        count=input->tellg()/24;
        input->seekg(0);

        while(input->tellg()!=end){  
           for(int i=0;i<count;i++){
                 input->read((char*)( &zip[i]->postalCode ), sizeof(int    ));
                 input->read((char*)( &junk ),               sizeof(int    ));
                 input->read((char*)( &zip[i]->longitude  ), sizeof(double  ));
                 input->read((char*)( &zip[i]->latitude   ), sizeof(double  ));
                 cout << "Currently at position" << input->tellg() << endl;
                 //zipToCout(*zip);
            }

         }
     }

我需要做的是遍历文件,并将结构的每个部分存储在数组的相应部分中。我正试图做尽可能小的改变,使这项工作。我知道你们中的一些人可以*你们应该像这样用括号和&运算符

&(zip[i]->postalCode)

您所做的是使用语句&zip[i]将zip[i]转换为地址,然后尝试取消引用它。这就给了你这个错误


-MS

使用矢量存储数据-

然后使用sort-


完成任务

我假设zip是一个动态数组。是这样吗

因此,当您声明数组时,您正在执行以下操作:

zipType* z = new zipType [10];
您的函数binRead应声明为:

void binRead(zipType *zip, fstream *input){
调用binRead时,您不想输入指针的地址

binRead(&z,input);
相反,您希望传递指针z:

binRead(z,input);
在binRead的内部,确保引用zip,如下所示:

zip[i].postalCode
因为您已经传递了一个指针,所以在binRead中所做的所有更改都将被更改为zip指向的内存

下面是一个小程序,演示了我所说的内容:

#include <iostream>

struct zipType{
    int postalCode;
    double longitude;
    double latitude;

};

void blah(zipType *zip){
    for (int i=0;i<10;i++){
        std::cout << zip[i].postalCode  << std::endl;
    }
    zip[0].postalCode = 60626;
}

int main(int argc, const char * argv[])
{
    zipType* z = new zipType [10];

    for(int i=0;i<10;i++){
        z[i].longitude = i * 10;
        z[i].latitude = i * 5;
        z[i].postalCode = i * 6;
    }
    blah(z);
    std::cout << z[0].postalCode;
    delete [] z;
}
#包括
结构zipType{
国际邮政编码;
双经度;
双纬度;
};
虚无(zipType*zip){

对于(inti=0;如果可能的话,我想使用binRead函数
voidbinread(zipType*zip,fstream*input)
而不是
voidbinread(zipType*zip[],fstream*input)
我试过:
input->read((char*)(&(zip[i]>postalCode)),sizeof(int))
仍然有同样的错误。你说的有道理,但我不知道如何让它工作lol。我对指针太差了,并且得到*和&混合了。我应该在这个练习中使用数组,但我会阅读上面的帖子,因为我相信它会把事情弄清楚。这很有道理,我想我有一些错误我的指针,我将在此基础上改变一些东西,如果我能让它工作,我将+1谢谢你!非常感谢,我改变了我在main中的指向方式,一切都很顺利。谢谢!
zip[i].postalCode
#include <iostream>

struct zipType{
    int postalCode;
    double longitude;
    double latitude;

};

void blah(zipType *zip){
    for (int i=0;i<10;i++){
        std::cout << zip[i].postalCode  << std::endl;
    }
    zip[0].postalCode = 60626;
}

int main(int argc, const char * argv[])
{
    zipType* z = new zipType [10];

    for(int i=0;i<10;i++){
        z[i].longitude = i * 10;
        z[i].latitude = i * 5;
        z[i].postalCode = i * 6;
    }
    blah(z);
    std::cout << z[0].postalCode;
    delete [] z;
}