Таким образом, я следую определенной серии учебников и пытаюсь использовать эти знания для того, чтобы сделать что-то свое, похожее, но и отличающееся от самого ряда. В одном разделе, чтобы устранить определенные неудобства, которые не важны для масштаба моей проблемы, возможное решение состояло в том, чтобы сохранить определенный кусок данных в членах структуры и затем вызвать эту структуру в функции, которая позже выводит данные точно так, как мы хотели - в виде массива.
Все было хорошо, пока функция по какой-то причине не отказалась принимать значения массива, утверждая, что в аргументах массива была перегрузка (я укажу ошибки позже), и то, что объект, который я возвращаю, не соответствует типу возврата функции.
Вот мой код:
struct TriCoord
{
float Position[3];
int Label[2];
};
std::array<TriCoord, 3> Implement(float x, float y, float z, int j) //2
{
float size = 1.0f;
TriCoord f0;
f0.Position = { x, y, z }; //1
f0.Label = { j, 1 }; //1
TriCoord f1;
f1.Position = { x + 0.5, y + 0.5, z };
f1.Label = { j, 2 };
TriCoord f2;
f2.Position = { x + 0.5, y, z };
f2.Label = { j, 3 };
return { f0, f1, f2 }; //2
};
int main()
{
int X;
float A[3] = Implement(3, 4, 5, 1); //3
std::cout << A[0] << ", " << A[1] << ", " << A[2] << std::endl;
std::cout << "Press Enter key to return" << std::endl;
std::cin >> X;
return 0;
}
Я поместил комментарии, определяющие, где именно ошибки .
1) Компилятор говорит, что f0 "не является изменяемым значением lvalue". Я не вижу причин, почему это не должно быть. В аргументе массива конкретно во втором элементе массива (в данном случае у) компилятор говорит, что я добавляю «слишком много значений инициализатора». Опять бессмысленно. Я указал, что массив Position должен иметь 3 элемента, и подключаю 3 элемента соответствующего типа (float).
Эти две ошибки распространяются на f0.Label, а также на другие TriCoords.
2 ) Компилятор говорит, что функция «возвращает неполный тип« std :: array »». Кроме того, в обратной строке «инициализация списка для типа объекта« std :: array »недопустима, поскольку тип является неполным».
Технически, что я возвращаю, это массив std, элементами которого являются TriCoords и суммы 3, так что я не вижу проблемы еще раз. Я обошел эту проблему, изменив тип возвращаемого значения функции на float, но вместо него строка возврата генерирует ту же ошибку для второго элемента (в данном случае f1), что и в задаче 1.
3) " Для агрегатного объекта ожидается инициализация '{...}' "Я понятия не имею, что это значит. Я получаю эту ошибку независимо от того, какой тип возврата я указываю для своей функции.
Я должен подчеркнуть, что и я, и сериал, за которым я следую, используют Visual Stud ios, и в видео таких ошибок не появлялось Я был следующим. Я даже копировал и вставлял весь код видео построчно, но ошибки по-прежнему сохранялись, и я пришел к выводу, что в настройке Visual Stud ios что-то не так, возможно, из-за различий в версиях ( видео было загружено в этом году, поэтому оно не работает на слишком старой версии). Все мои зависимости также правильны и присутствуют в соответствующих каталогах, основанных на проектах, я дважды проверил их.
Наконец, код, который я использовал выше, был отдельным тестовым кодом, который я переделал для нового проекта в попытаться изолировать ошибку. Излишне говорить, что в обоих случаях я получал одинаковую ошибку, указывающую на то, что в пользовательских заголовках и библиотеках моего исходного проекта нет ничего неправильного.