Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将数字从文件读入顶点向量_C++_File Io_Vector - Fatal编程技术网

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.