这是我的构造函数代码:
vertex_array(float* &vertex_buffer, std::string& texture_file);
这是我的主要应用代码:
float cube1[] = { 0.5f, -0.5f, 0.5f, 1.0f, 0.0f,
0.5f, -0.5f, -0.5f, 1.0f, 1.0f,
-0.5f, -0.5f, -0.5f, 0.0f, 1.0f,
-0.5f, -0.5f, 0.5f, 0.0f, 0.0f,
0.5f, 0.5f, 0.5f, 1.0f, 0.0f,
0.5f, 0.5f, -0.5f, 1.0f, 1.0f,
-0.5f, 0.5f, -0.5f, 0.0f, 1.0f,
-0.5f, 0.5f, 0.5f, 0.0f, 0.0f };
vertex_array va_1(cube1, "blocks.png");
我收到错误消息:没有构造函数“ vertex_array :: vertex_array”的实例与参数列表匹配,参数类型为:(float [40],const char [11])
我花了大约一个小时来寻找问题,但是我找不到任何错误的代码。我什至查看了另一个示例,该示例传入的参数类型完全相同,但是传递给类型为const void *的参数,它在示例中起作用,但是不适用于我。我怎么了?
答案 0 :(得分:0)
您提供给构造函数的第一个参数是指向多个float
的指针,第二个参数是const char*
,它将被隐式转换为const std::string
,因此您需要相应地更改签名:
vertex_array(float* vertex_buffer, const std::string& texture_file);
您还可以删除texture_file的引用声明以使其有效,但是如果以后要使用真实的std :: string实例化vertex_array,则将导致不必要的复制构造,因此请使用{{1 }}参考。
如果vertex_buffers的大小不同,则也需要提供大小作为参数,或者考虑使用const
或容器来跟踪元素数。
示例:
std::initializer_list
答案 1 :(得分:-3)
我认为您可能错误地使用了运营商地址&
。
从声明中删除它们,然后重试。
将它们用于数组是没有意义的,并且实际上会抵消您要实现的目标。第二个参数也不正确,因为您试图获取r值的地址。