我使用的脚本将结构摄像机的矢量写入二进制文件:
ofstream file;
file.open(cameraParamFile.c_str(), ios_base::binary);
const char* pointer = reinterpret_cast<const char*>(&cameras[0]);
size_t bytes = cameras.size() * sizeof(cameras[0]);
file.write(pointer, bytes);
这就是结构的样子:
struct CV_EXPORTS CameraParams
{
CameraParams();
CameraParams(const CameraParams& other);
const CameraParams& operator =(const CameraParams& other);
Mat K() const;
double focal; // Focal length
double aspect; // Aspect ratio
double ppx; // Principal point X
double ppy; // Principal point Y
Mat R; // Rotation
Mat t; // Translation
};
这是矢量声明:
vector<CameraParams> camerasTest
现在当我尝试从这个文件中读取时,我无法做到(仍然是c ++的新手)。它给出了错误,说明没有匹配函数来调用&#39; std :: basic_ifstream :: read(std :: vector ,size_t&amp;)&#39; | *。
这是我的尝试:
vector<CameraParams> camerasTest;
ifstream inf1;
inf1.open(cameraParamFile.c_str(), ios::binary | ios::in);
inf1.read(&camerasTest, bytes));
我认为这是与类型转换或错误参数相关的问题。有人可以指出正确的方法吗?
我试过阅读下面提到的链接但是没有多大意义: Write and load vector of structs in a binary file c++
修改
正如评论中所建议的,我尝试使用上述链接实现自定义阅读器和编写器。这是我写的功能。它仍然无效。
void writeStruct(ostream& out, const vector<CameraParams> &vec)
{
typename vector<CameraParams>::size_type size = vec.size();
os.write((char*)&size, sizeof(size));
os.write((char*)&vec[0], vec.size() * sizeof(CameraParams));
}
void readStruct(istream& is, vector<CameraParams> &vec)
{
typename vector<CameraParams>::size_type size = 0;
is.read((char*)&size, sizeof(size));
vec.resize(size);
is.read((char*)&vec[0], vec.size() * sizeof(CameraParams));
}
当我尝试使用以下脚本使用上述读取功能打印值时:
vector<CameraParams> cameraTest;
std::ifstream in(cameraParamFile.c_str(), std::ios::in | std::ios::binary);
readCameraParamsVector(in, cameraTest);
in.close();
cout << cameraTest[0].R;
cout << "\n";
cout << cameras[0].R;
它开始给我一个运行时错误,说进程终止,状态为-1073741819
编辑2 正如评论中所提到的,为什么我无法使用链接Write and load vector of structs in a binary file c++中提到的答案?我在编辑1中已经提到我使用该链接编写了写入和读取函数,但仍然给出了如上所示的错误。