Недопустимый неполный тип c

Недопустимый неполный тип c

Прежде всего я хочу извиниться за мой английский. Боюсь, это не мой родной язык. Я схожу с ума от этого кода.

Я делаю небольшой движок для игр. Я реализовал класс под названием «процесс», который будет наследовать все элементы, составляющие игру. То, что происходит, заключается в том, что при реализации двух из этих элементов, которые наследуются от «процесса», компилятор выдает мне следующую ошибку:

Я читал, что многие из проблем в этом отношении были опубликованы на этом форуме ранее, и я понимаю, что ошибка в том, что я неправильно использую класс (класс «процесс»), потому что не выполняю инстанцирование должным образом или потому, что в нем чего-то не хватает. класс (обязательный метод не реализован).

Но когда я читаю и проверяю свой код, я не могу найти, где я делаю ошибку. Кто-нибудь может увидеть в чем я не прав?

Я думаю, что вам не нужны остальные классы. Но если вам нужно, вы можете найти в ссылке на GitHub выше.

Решение

У вас есть случай циклической зависимости здесь: Engine класс использует process а также process использования Engine , Это часто показатель неверной архитектуры.

Если все, что вам нужно, это решить проблему компиляции, предварительное объявление должно помочь: удалите либо «process.h» из «engine.h» (или наоборот) и объявите

в заголовке «engine.h».

Другие решения

У вас есть круговая проблема включения.

process.h включает в себя engine.h а также engine.h включает в себя process.h , Вам нужно разорвать этот цикл. Обычно это делается с использованием предварительных объявлений и добавления включений в исходные файлы.

На первый взгляд кажется, что вы можете сделать предварительное объявление процесса в engine.h и удалите включение.

Читайте также:  Планшет как второй монитор через usb

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

Пример выпуска

В вышеупомянутом есть круговая проблема включения; включенные охранники не имеют ничего общего с решением этой проблемы. Кроме того, так как Foo использует только указатель на Bar Например, для прерывания цикла можно использовать предварительную декларацию.

Неполный тип — это тип, который описывает идентификатор, но не содержит информацию, необходимую для определения размера идентификатора. An incomplete type is a type that describes an identifier but lacks information needed to determine the size of the identifier. Неполным типом может быть: An incomplete type can be:

Тип структуры, для которой еще не были определены члены. A structure type whose members you have not yet specified.

Тип объединения для которого еще не были определены члены. A union type whose members you have not yet specified.

Тип массива, для которого еще не были определены размерности. An array type whose dimension you have not yet specified.

Тип void является неполным типом, который невозможно сделать полным. The void type is an incomplete type that cannot be completed. Чтобы дополнить неполный тип, укажите отсутствующие данные. To complete an incomplete type, specify the missing information. В следующих примерах показано, как создать и дополнить неполные типы. The following examples show how to create and complete the incomplete types.

Чтобы создать неполный тип структуры, объявите тип структуры, не указывая ее члены. To create an incomplete structure type, declare a structure type without specifying its members. В этом примере указатель ps указывает на неполный тип структуры с именем student . In this example, the ps pointer points to an incomplete structure type called student .

Читайте также:  Перевести устройство в режим работы с одином

Чтобы дополнить неполный тип структуры, объявите тот же самый тип структуры ниже в той же самой области видимости и задайте его члены, как в следующем примере: To complete an incomplete structure type, declare the same structure type later in the same scope with its members specified, as in

Чтобы создать неполный тип массива, объявите тип массива, не указывая для него число повторений. To create an incomplete array type, declare an array type without specifying its repetition count. Например: For example:

Чтобы дополнить неполный тип массива, объявите то же самое имя ниже в той же самой области видимости и задайте его число повторений, как в следующем примере: To complete an incomplete array type, declare the same name later in the same scope with its repetition count specified, as in

Writing a klonkide program for my final year project.

But now there was an error that had me stunned.

This is the draft for my klondike program;

However, on the "*rank[]" was an error that says: "Incomplete type is not allowed". Also i get the C2011 error upon running it. Also when i tried to write the class, the chars above will start to get the Incomplete type error. Help?

Now i removed the "struct", but the incomplete type error still exists, and it now shows:

Error C2229 class ‘card’ has an illegal zero-sized array
Error C2997 ‘card::show’: array bound cannot be deduced from an in-class initializer

Actually the struct was only there because of this error.

EDIT: ok. i now solved this by dictating the arrays in a way like one of the answers below. I also found another problem that will merit another question soon.

Читайте также:  Как подгрузить лисп в автокад

Создан 17 июн. 16 2016-06-17 13:35:57 Mr-ex777

Err. this is all kinds of broken. Two classes declared with the same name, but different member types? (You are aware that the only difference between ‘struct’ and ‘class’ is that the one is defaulting to ‘public’ and the other to ‘private’? You are redefining ‘card’.) – DevSolar 17 июн. 16 2016-06-17 13:37:55

What is "*the C2011 error*"? – melpomene 17 июн. 16 2016-06-17 13:40:13

Both your types are named "card", and C2011 is "class type redefinition". What’s unclear about that error? – molbdnilo 17 июн. 16 2016-06-17 13:41:27

The errors are always there even if the struct does not exist. – Mr-ex777 17 июн. 16 2016-06-17 13:56:55

Ссылка на основную публикацию
Не устанавливается ватсап на планшет леново
Lenovo на сегодняшний день являются одним из самых распространенных видов мобильных девайсов у пользователей. Из-за этого многие хотят знать, как...
Нвидиа geforce gts 450
Описание NVIDIA начала продажи GeForce GTS 450 13 сентября 2010 по рекомендованной цене 129$. Это десктопная видеокарта на архитектуре Fermi...
Не активно меню пуск windows 10
В последнее время у меня перестала работать кнопка ПУСК: при нажатии на нее - ничего не происходит. Если на нее...
Не устанавливается windows xp синий экран
Просмотров: 208 853 Автор: admin Дата: 11-06-2011 Не устанавливается Windows XP процесс установки прерывается в самом начале и сопровождается появлением...
Adblock detector