【发布时间】:2016-01-19 15:49:01
【问题描述】:
我无法从结构中检索某些值。在下面简化的 sn-ps 中,struct Model 的 vertices 成员包含一个值数组,如果在其中调用 buildModel() 并在其中调用 drawModel(),则可以正确检索这些值。但是,如果我随后调用 buildModel() 然后调用 drawModel() ,则不会出现错误,但不会使用正确的值检索顶点。这使我相信变量范围已结束,我错误地传递了引用,或者需要使用 malloc 在堆上定义顶点成员。
型号.H:
typedef struct Model{
Vertex *vertices;
} Model;
Model* newModel();
Model* setVertices(Vertex *vertices, Model *model);
模型.CPP:
Model* newModel(){
Model* model;
model = (Model* )malloc(sizeof(Model));
//model->vertices = (Vertex *)malloc(sizeof(Vertex)); This did not help...
return model;
}
Model* setVertices(Vertex *vertices, Model *model){
model->vertices = vertices;
return model;
}
绘图.CPP:
Model* buildModel(){
Model* model = newModel();
Vertex vertices[] = {
{ XMFLOAT3(-1.0f, 5.0f, -1.0f), (XMFLOAT4)colorX},
... //Abbreviated declaration
};
model = setVertices(vertices, model);
//drawModel(model); Calling drawModel() here retrieves vertices correctly
return model;
}
void drawModel(Model *model){
loadVertices(d3dDeviceRef, 11, model->vertices); //Trying to pass vertices array here
}
这在学习中非常有用,并且我尝试使用尽可能少的类,并且尽可能多地使用 C 路线而不是 C++。
任何帮助将不胜感激,
谢谢。
【问题讨论】:
-
如果您想“走 C 路线”,请使用 C,而不是 C++。否则使用语言提供的功能。无论如何,这是 C++,所以不要使用 C 标签。 C 和 C++ 是不同的语言。
-
并且没有显示数组成员。指针不是数组,反之亦然!
-
@Olaf 将很快再次尝试使用 C,Visual Studio 阻止我使用它基于我正在使用的一些库。同时,似乎一些 C 解决方案也可以在 C++ 中运行。就像 David Heffernan 的回答 [这里] (stackoverflow.com/a/8224387/1914293) 说
malloc可以在 C++ 中使用,但new是预期的。完全同意认真对待一门语言,但仍在学习,即使是从你的 cmets 那里学习。 -
不要使用 C++ 编译器编译 C 代码! C 已经发展了很多,C++ 也是如此。请注意,C 至少表示 C99,但实际上是标准 C,即仅 C11(没有多个 C 标准)。即使对于相同的语法和语法,一些语义也有细微的差别,但意义重大。两种语言的共同子集太小,无法用任何语言编写好的非平凡代码。一个概括的个人说明:我会拒绝学生或同事的任何代码,这些代码为了兼容性而牺牲了提高代码质量的语言功能。
-
@Olaf 半兼容代码是个坏主意,但打算用我有一天学到的东西重写。将以上内容仅用于个人用途,将同事或老师作为用户保持观点是一个绝妙的主意。