这里是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
任何人都知道如何解决这个错误?
答案 0 :(得分:1)
你必须
Vertex *v = new Vertex();
在尝试将值存储到v之前。 你的类(或结构)顶点应该有一个构造函数(甚至是一个空的),这应该解决它。