Столкнулся с такой проблемой, что ниже стоящий класс не может использовать выше стоящий класс как тип данных, хотя я и прописал перед ним class UpperClassName; Вот скрин для понимания. http://s1.uploadpics.ru/images/-yCmgfdmlf.png Подскажите пожалуйста что не так.
Проблема в том, что реализация Bullet находится снизу. Очевидно же: использование неопределённого типа
Это я вижу, я не совсем корректно поставил вопрос. Правильнее будет спросить как решить эту проблему без сдвига классов? Я вообще не изучал с++ ни в школе, ни где-либо ещё, учусь по видеоурокам. Так вот в одном из таких уроков была похожая ситуация с двумя классами, и данную проблему решили таким простым путём, как своего рода "переопределение" класса выше. Как я и сделал, над классом Player есть строка, которая якобы должна дать понять компилятору, что где-то в коде есть этот самый класс Bullet, но почему-то не работает...
Raf_Tank, не забывайте: C++ - это только "C для убогих". То, что не работает в C, то не сработает и в C++. Что у Вас происходит в ошибочной строчке? Компилятор пытается подставить в код операцию "зафигачить параметр". Для этого нужно знать "размер параметра", иначе "зафигачивание" не работает. Размер же "Bullet" на этот момент не известен, известно только, что это класс, а сколько в нем полей - неизвестно. В C, конечно, никакой идиот не будет пытаться передавать целиком структуру данных (а в C++ - пожалуйста), а ограничится передачей указателя. Указатель-то всегда имеет одинаковый "размер" и "зафигачивается" без проблем. Для передачи указателя на элемент класса предварительного "объявления без определения" достаточно, для передачи элемента класса целиком - нет. Тем более, что Вы не только передали элемент целиком, но и пытаетесь получить доступ к его кусочку "bx", о котором уж точно еще ничего не известно.
P.S. За пользование видеокурсами и выкладывание листинга в виде картинки надо было бы карму попортить. Быдлокодеры любят повторять: "логика, убивающая мозг",- когда их пытаются заставить программировать.
Сообщение отредактировал Gudleifr - Среда, 01 Февраля 2017, 20:22
Raf_Tank, в следующий раз выкладывай код не картинкой а текстом в теге [_code]твой код[/code] без "_" перед code. И копируй код ошибки ниже. Без сдвига классов только указателями, выложи листинг как полагается, покажут что и куда, а так - лень.
ЦитатаGudleifr ()
P.S. За пользование видеокурсами и выкладывание листинга в виде картинки надо было бы карму попортить.
Вот тут согласен)
Цитатаdalikivug ()
тс стоит обротить внимание на C#, чтобы уменьшить последующее кол-во вопросов
Не слушай его))
Сообщение отредактировал LP - Четверг, 02 Февраля 2017, 01:27
Размер же "Bullet" на этот момент не известен, известно только, что это класс
компилятор даже не знает что это класс, о чём говорит вторая ошибка...
Добавлено (02 февраля 2017, 05:39) ---------------------------------------------
Код
#include <iostream> using namespace std;
class Enemy{ public: float ex; Enemy(float e){ ex = e; } }; class Bullet; class Player{ public: float xx; void sum(Enemy e, Bullet b){ xx = e.ex + b.bx; cout << xx; }
}; class Bullet{ public: float bx;
Bullet(float b){ bx = b; } };
int main() { bool a = 1; Enemy e1(1.25); Bullet b1(1.75); Player p1; p1.sum(e1, b1); return 0; }
Ошибка 1 error C2027: использование неопределенного типа "Bullet" c:\проект1\проект1\main.cpp 18 1 Проект1 Ошибка 2 error C2228: выражение слева от ".bx" должно представлять класс, структуру или объединение c:\проект1\проект1\main.cpp 18 1 Проект1
Сообщение отредактировал Raf_Tank - Четверг, 02 Февраля 2017, 05:39