编辑:好的,因此在我下面的帖子中提供了一些帮助,我将其编译。我将将文件读入数组的行更改为此:

    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;


现在,我将其运行到循环的第一次迭代中,但随后遇到了分段错误。

    Currently at position24
    Segmentation fault (core dumped)


以下原始帖子:

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

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

         }
     }


现在在主目录中,我创建了一个zipType[n],其中n是.bin文件中zipType的数量。然后我叫binRead(&testZipType[n],&testFile);。您可以想象这给了我一些错误。我收到一些与此类似的错误:

    zipType.cpp:22:32: error: base operand of ‘->’ has non-pointer type ‘zipType’
input->read((char*)( &zip[i]->postalCode ), sizeof(int    ));


我需要做的是遍历文件,并将结构的每个部分存储在数组的相应部分。我正在尝试进行尽可能小的更改以使此工作有效。我知道你们中的某些人可以*

最佳答案

我假设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;
}

07-28 11:26