C ++:读取文件中的错误

时间:2015-02-28 04:37:18

标签: c++

这里是C ++的新手。我试图在C ++中实现网格简化算法。我在这里遇到了一些非常奇怪的事情。

void Mesh::loadMF(const char* filename) {
    init();
    std::ifstream infile;
    infile.open(filename, std::ios::in);
    std::string strbuff;
    while (std::getline(infile, strbuff)) {
        std::stringstream ss;
        ss << strbuff;
        char type;
        ss >> type;
        if (type == 'v') {
            Vertex* v;
            ss >> v->x >> v->y >> v->z;
            print(v->x);
            V.push_back(v);
        }
    }
    infile.close();
}

loadMF类的Mesh方法的作用是它读取.mesh文件并加载此网格中存在的顶点。

.mesh文件包含以下内容:

v 3.201600 -1.456025 1.928155
v 3.520754 -1.658353 2.036948
v 3.121542 -1.461538 2.045325
v 3.020618 -1.278575 1.711228
f 1 2 3
f 2 3 4

(由于type == 'f'部分还没有任何错误,我没有在此处添加。)

我在以下代码块中执行真正的网格简化。

void Mesh::simplifyMesh(const char* input, const char* output, int faceCnt) {
    //  You may assume inputs are always valid.
    loadMF(input);
    std::cout << "Original face count: " << F.size() << std::endl;

    print((*V[0]).x);
    print((*V[1]).x);
    print((*V[2]).x);
    print((*V[3]).x);

    //  And other fanciful stuff.
    //  So on, omitted here.

正如您所看到的,我尝试使用print进行调试。我遇到的错误是,虽然对于print函数中的loadMF语句(即print(v->x)),它会成功打印出不同的x值,用于{{1在print函数中的语句,它只打印最后的x值。也就是说,它连续四次打印3.020618。无论我在.mesh文件中有多少simplifyMesh个,它总是只打印最后一个数字。

如果它有帮助,我还包括了Vertex定义。

V

任何人都知道如何解决这个错误?

1 个答案:

答案 0 :(得分:1)

你必须

 Vertex *v = new Vertex();

在尝试将值存储到v之前。 你的类(或结构)顶点应该有一个构造函数(甚至是一个空的),这应该解决它。