【发布时间】:2021-05-19 23:35:55
【问题描述】:
我正在用 C++ 编写一个非常简单的 OBJ 导出器(对于 VC6,因为我正在编写一个只能在那里编译的旧项目。)
现在,我一直在研究如何使用无限数量的结构来制作顶点位置线。这听起来可能有点傻,但这是我用 C++ 编写的第一个功能程序,所以我不太了解这些概念。
我假设我做错了,因为在 Internet 上找不到任何关于我正在尝试做的事情。
这是我的标头结构代码:
struct PointList {
float X;
float Y;
float Z;
};
..以及实际的 OBJ 导出函数的代码:
void OBJEXP::WriteOBJ(OBJEXP::PointList Points, std::string File) // Writes an OBJ.
{
ofstream output(File + ".obj");
for (int i = 0; i < sizeof(Points); i += 1)
{
output << "v " + to_string(Points.X) + " " + to_string(Points.Y) + " " + to_string(Points.Z) + "\n";
}
output.close();
cout << "All done\n";
}
我的主文件(用于测试代码,否则每次我保存文件时都会运行它:)
OBJEXP::PointList POINTZ;
int main()
{
POINTZ.X = 1.0f;
POINTZ.Y = 5.5f;
POINTZ.Z = 2.0f;
OBJEXP::WriteOBJ(POINTZ, "testobject");
std::cout << "Execution done\n";
}
我的 OBJ 文件如下所示:
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
v 1.000000 5.500000 2.000000
这显然不是很正确。
【问题讨论】:
-
你确实知道
infinite不是一个数字,对吧? -
PointList不是一个好名字,因为它不是任何东西的列表。考虑将其重命名为Point并使用std::vector<Point>作为它们的集合。 -
请注意,MSVC 6.0 是在 1998 中发布的。它是 C++ 的一个古老版本(可能甚至不符合 C++98,更不用说该标准的任何更新版本了)。
-
您不能在计算机程序中使用 无限 数量的任何东西。另一方面,可以为无限或无限数量的东西设计程序。也就是说,任何限制都是由程序之外的因素(例如有限的内存)设置的。
-
老实说,我不确定你想在这里做什么。 for 循环正在迭代
sizeof(Points)次,这将是结构占用的字节数。 3(浮点数)x 4(每个浮点数的字节数)= 12,这是程序输出的行数。但当然,每次它都会输出相同的 X、Y 和 Z。
标签: c++ visual-c++-6