Я получаю сообщение об ошибке C ++, в котором говорится, что типы аргументов моего конструктора классов не соответствуют типам параметров - PullRequest
0 голосов
/ 11 ноября 2018

Вот мой код конструктора:

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 голосов
/ 11 ноября 2018

Первый аргумент, который вы передаете конструктору, - это указатель на число float с, а второй - const char*, который будет неявно преобразован в const std::string, поэтому вам необходимо соответствующим образом изменить сигнатуру:

vertex_array(float* vertex_buffer, const std::string& texture_file);

Вы также можете удалить объявление ссылки для texture_file, чтобы сделать его действительным, но если позднее вы собираетесь создать экземпляр vertex_array с использованием реальной строки std ::, это приведет к ненужной конструкции копирования, поэтому перейдите к const ссылка.

Если у вас разные размеры vertex_buffers, вам также необходимо указать размер в качестве аргумента или рассмотреть возможность использования std::initializer_list или контейнера для отслеживания количества элементов.

Пример:

vertex_array(std::initializer_list<float> vertex_buffer, const std::string& texture_file);

vertex_array va_2(
                { 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}, "blocks.png");
0 голосов
/ 11 ноября 2018

Я думаю, что вы, возможно, неправильно используете свой адрес операторов &.

Удалите их обоих из декларации и попробуйте снова.

Использование их для массива бессмысленно и буквально сводит на нет то, что вы пытаетесь достичь. Второй аргумент также неверен, потому что вы пытаетесь получить адрес r-значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...