C++ 将数字从文件读入顶点向量
因此,我试图将一个文本文件(大小未知)读入我自己定义类型的向量向量:C++ 将数字从文件读入顶点向量,c++,file-io,vector,C++,File Io,Vector,因此,我试图将一个文本文件(大小未知)读入我自己定义类型的向量向量:Vertex(包含浮点x,y,z)。因此,当所有这些都说了又做了之后,coordpts(向量向量的变量)中的每个“行”都应该代表正在读取的对象的一个面,因此应该有多组xyz坐标 我工作的前提是,读取文件中的每一行代表一个面(立方体、茶壶或任何对象) 我知道我应该将每组三个坐标推回一个临时向量,然后将该临时向量推回coordpts,但我在访问元素时遇到了问题 当我执行上述操作时,我的代码会编译,但每当我尝试访问某个元素时,就会出现
Vertex
(包含浮点x,y,z)。因此,当所有这些都说了又做了之后,coordpts
(向量向量的变量)中的每个“行”都应该代表正在读取的对象的一个面,因此应该有多组xyz坐标
我工作的前提是,读取文件中的每一行代表一个面(立方体、茶壶或任何对象)
我知道我应该将每组三个坐标推回一个临时向量,然后将该临时向量推回coordpts
,但我在访问元素时遇到了问题
当我执行上述操作时,我的代码会编译,但每当我尝试访问某个元素时,就会出现错误
我是否遗漏了一些明显的东西?
我主要只想打印出数据,这样我就可以看到我是否正确地读入了数据(也因为我以后必须在其他函数中访问它)
头文件:
#包括//标准I/O例程的定义。
#包括
#包括//数学库的定义。
#包括
#包括
#包括
#包括
使用名称空间std;
类顶点{
公众:
顶点(){};
浮动x,y,z;//浮动以存储单个坐标。
};
类对象:公共顶点{
公众:
对象(){};
向量坐标;//从顶点类派生的x、y、z浮点向量。
//向量坐标;
};
程序文件:
(我知道main不在那里,我已将其包含在另一个文件中。)
#包含“header.h”//include头文件。
对象对象;
字符串输入文件;
fstream-myfile;
void Raw::readFile(){
向量温度;
cout>输入文件;
打开(输入文件);
如果(myfile.is_open()){
while(myfile>>object.x>>object.y>>object.z){
温度推回(对象);
对象协调后推(临时);
}
}
myfile.close();
库特
或者,您可以简单地创建自己的重载来输出std::vector
行/面
std::ostream& operator<<(std::ostream& out, const std::vector<Vertex>& face) {
for (auto&& v : face) {
out << v.x << " " << v.y << " " << v.z << std::endl;
}
return out;
}
/* ... */
std::cout << object.coordpts[0] << std::endl; // Ok, output first row/face.
std::ostream&operatorStating“I'm Get errors”在这里不是一个有效的问题。请发一条帖子!什么样的错误,Katie?对不起,应该包括这一点。当我试图通过object.coordpts[0]单独访问时,x在std:\uu 1::vector中是一个名为“x”的非成员(y和z相同)。这里发生了一些奇怪的事情。你有一个全局对象,你反复更新并复制到一个临时对象,然后再复制到同一对象的一个成员中。为什么?为什么对象一开始继承自顶点打印出一整行(正在读取的某个对象的面)。例如,如果我正在读取一个具有立方体坐标的文件,则一行中会有12个单独的项,四组各有三个坐标。理想的输出是“[[0,0,0],[1,1,1],[2,2],[3,3,3]]“……我会像你上面说的那样,通过创建自己的重载来实现吗?@Katie是的,你可以通过自定义的重载来实现这一点。”
#include "header.h" // Include header file.
Object object;
string inputfile;
fstream myfile;
void Raw::readFile() {
vector<Vertex> temp;
cout << "Enter the name of the file: ";
cin >> inputfile;
myfile.open(inputfile);
if(myfile.is_open()) {
while(myfile >> object.x >> object.y >> object.z) {
temp.push_back(object);
object.coordpts.push_back(temp);
}
}
myfile.close();
cout << object.coordpts[0] << endl;
};
cout << object.coordpts[0] << endl;
std::cout << object.coordpts[0][0].x << std::endl;
std::ostream& operator<<(std::ostream& out, const std::vector<Vertex>& face) {
for (auto&& v : face) {
out << v.x << " " << v.y << " " << v.z << std::endl;
}
return out;
}
/* ... */
std::cout << object.coordpts[0] << std::endl; // Ok, output first row/face.