我收到一个C ++错误,说我的类构造函数参数类型与我的参数类型不匹配

时间:2018-11-11 14:25:31

标签: c++ types parameters constructor arguments

这是我的构造函数代码:

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 *的参数,它在示例中起作用,但是不适用于我。我怎么了?

2 个答案:

答案 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值的地址。