Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
dimkaok
1 / 1 / 4
Регистрация: 06.03.2013
Сообщений: 128
#1

error C2504: CMove: не определен базовый класс - C++

20.04.2013, 11:42. Просмотров 1668. Ответов 16
Метки нет (Все метки)

Подскажите, пожалуйста, почему может возникать данная ошибка?

Файл CBattle.h
C++
1
2
3
4
5
6
#include "CMove.h"
class CPlayer : public CMove {  // Ошибка на этапе выполнения: error C2504: CMove: не определен базовый класс
  public:
     CPlayer o_enemy;
     void enemyAttack();
};
Файл CBattle.cpp
C++
1
2
3
4
5
6
7
#include "CBattle.h"
#include "CPlayer.h"
void CBattle::enemyAttack() {   
    if(o_enemy.getHealth() <= 0) {
        // ...
    }
}
Файл CMove.h
C++
1
2
3
4
5
6
7
8
9
#include "CPlayer.h"
#include "CBattle.h"
#include "CMessages.h"
 
class CMove {   
  public:
          CMessages o_messageBox;
          movePlayerOnTheMap()
};
Файл CMove.cpp
C++
1
2
3
4
#include "CMove.h"
void CMove::movePlayerOnTheMap() {
      o_messageBox.m_chooseDirectionToMove();
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2013, 11:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос error C2504: CMove: не определен базовый класс (C++):

Не определен базовый класс
Есть класс C_Button, в нем определен метод buttonEvents(). Этому методу...

Не определен базовый класс
Доброго времени суток. Столкнулся с проблемой при наследовании, и не могу...

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

Не определен базовый класс
Есть файл renderable.h: #pragma once #include &quot;device.h&quot; #include...

Не определен базовый класс
В проекте есть два проблемных класса: C_Button: #include &quot;C_Scenes.h&quot;...

Ошибка компиляции - "класс" : базовый класс не определен
Помогите пожалуйста, у меня в проекте есть несколько классов, которые имеют...

16
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.04.2013, 11:50 #2
ошибка потому что файл CMove.h подключен CBattle.h .
и почему в файле CBattle.h находится класс CPlayer?
1
dimkaok
1 / 1 / 4
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 11:56  [ТС] #3
Цитата Сообщение от Jupiter Посмотреть сообщение
ошибка потому что файл CMove.h подключен CBattle.h .
В файле CMove.h есть объявление "CBattle o_battle;". Если отключить CBattle.h,
то объект o_battle не смогу создать

Цитата Сообщение от Jupiter Посмотреть сообщение
почему в файле CBattle.h находится класс CPlayer?
Потому что в этом файле мне впервые понадобился объект класса CPlayer
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2013, 12:16 #4
Цитата Сообщение от dimkaok Посмотреть сообщение
movePlayerOnTheMap()
Это что?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.04.2013, 12:18 #5
Цитата Сообщение от dimkaok Посмотреть сообщение
В файле CMove.h есть объявление "CBattle o_battle;". Если отключить CBattle.h,
то объект o_battle не смогу создать
ну так и вынеси класс CPlayer в отдельный файл и убери из CBattle.h включение CMove.h
0
dimkaok
1 / 1 / 4
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 12:32  [ТС] #6
Цитата Сообщение от alsav22 Посмотреть сообщение
movePlayerOnTheMap()
Это что?
Это функция для перемещения игрока по игровому полю - массиву

Цитата Сообщение от Jupiter Посмотреть сообщение
ну так и вынеси класс CPlayer в отдельный файл и убери из CBattle.h включение CMove.h
Сорри, перепутал, вот CBattle.h:
C++
1
2
3
4
5
class CBattle : public CMove {  
  public:
      CPlayer o_enemy;
          void enemyAttack();
};
А вот CPlayer.h:
C++
1
2
3
4
5
#include "CMove.h"
#include <cstdlib>
class CPlayer : public CMove {
      // ..
};
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2013, 12:39 #7
Цитата Сообщение от dimkaok Посмотреть сообщение
CPlayer o_enemy;
Это что (1-й пост)?

Добавлено через 1 минуту
Цитата Сообщение от dimkaok Посмотреть сообщение
Это функция для перемещения игрока по игровому полю - массиву
Где возвращаемое значение? ; ?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.04.2013, 12:46 #8
Цитата Сообщение от dimkaok Посмотреть сообщение
В файле CMove.h есть объявление "CBattle o_battle;". Если отключить CBattle.h,
Цитата Сообщение от dimkaok Посмотреть сообщение
Сорри, перепутал, вот CBattle.h:
C++
1
class CBattle : public CMove
вам уже сказали в другой вашей теме, что так сделать нельзя

Добавлено через 5 минут
судя по обилию наследования, вы явно не понимаете для чего он нужно, вы лепите его в каждый класс
0
dimkaok
1 / 1 / 4
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 12:52  [ТС] #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Это что (1-й пост)?
Не понял, о чем идет речь?

Цитата Сообщение от alsav22 Посмотреть сообщение
Это функция для перемещения игрока по игровому полю - массиву
Где возвращаемое значение? ; ?
Вот, неправильно код скопировал void movePlayerOnTheMap();

Цитата Сообщение от Jupiter Посмотреть сообщение
вам уже сказали в другой вашей теме, что так сделать нельзя
Да, но как можно - так и не сказали


Цитата Сообщение от Jupiter Посмотреть сообщение
судя по обилию наследования, вы явно не понимаете для чего он нужно, вы лепите его в каждый класс
Я использую наследование, чтобы получить доступ к экземплярам классов, которые объявлены в других классах.
Просто мне здесь нужны не новые экземпляры, а именно те, что я определил ранее
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.04.2013, 12:55 #10
Цитата Сообщение от dimkaok Посмотреть сообщение
Да, но как можно - так и не сказали
Цитата Сообщение от dimkaok Посмотреть сообщение
Я использую наследование, чтобы получить доступ к экземплярам классов, которые объявлены в других классах.
Просто мне здесь нужны не новые экземпляры, а именно те, что я определил ранее
либо вы "постигаете" для чего и когда нужно применять наследование, либо вы и дальше остаетесь с неправильным кодом, за вас это вряд ли кто-то будет делать
0
dimkaok
1 / 1 / 4
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 12:59  [ТС] #11
Цитата Сообщение от Jupiter Посмотреть сообщение
либо вы "постигаете" для чего и когда нужно применять наследование, либо вы и дальше остаетесь с неправильным кодом, за вас это вряд ли кто-то будет делать
Ну я-же учусь, что вы от меня хотите?
0
Jupiter
Каратель
Эксперт С++
6568 / 3989 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.04.2013, 13:06 #12
Цитата Сообщение от dimkaok Посмотреть сообщение
Ну я-же учусь, что вы от меня хотите?
спрашивая глупости на форуме, вместо того чтоб взять толковую книгу
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2013, 13:23 #13
Цитата Сообщение от dimkaok Посмотреть сообщение
Не понял, о чем идет речь?
1-й пост, 1-й код, 4 строка. Что в ней?

Добавлено через 1 минуту
Цитата Сообщение от dimkaok Посмотреть сообщение
Ну я-же учусь, что вы от меня хотите?
Задача в чём?
0
dimkaok
1 / 1 / 4
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 18:42  [ТС] #14
Цитата Сообщение от alsav22 Посмотреть сообщение
1-й пост, 1-й код, 4 строка. Что в ней?
CPlayer o_enemy; - это объявление экземпляра o_enemy класса CPlayer.

Цитата Сообщение от alsav22 Посмотреть сообщение
Задача в чём?
Да что-то я с наследованием намудрил, не пойму, что именно.

В общем, беда в том, что я объявил объект objB класса B и объект objC класса С в классе А,
т.к. там мне эти объекты впервые понадобились:
C++
1
2
3
4
5
6
7
class A {
  public:
    B objB;
    C objC;
};
 
class B : public A {};

Позже мне в классе В нужен объект objC. Чтобы получить к нему доступ,
я использую наследование. Проблема в том, что вместе с объектом objC наследуется
объект objB. Получается, что он определен в своем-же классе, а этого нельзя делать.
Но по другому я не знаю, как в данной ситуации получить доступ к objB
0
alsav22
5438 / 4833 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
20.04.2013, 19:32 #15
Цитата Сообщение от dimkaok Посмотреть сообщение
CPlayer o_enemy; - это объявление экземпляра o_enemy класса CPlayer.
В объявлении класса создаёте объект этого же класса? И это компилируется?
0
dimkaok
1 / 1 / 4
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 21:30  [ТС] #16
Цитата Сообщение от alsav22 Посмотреть сообщение
И это компилируется?
Нет, в том-то и дело

Добавлено через 1 час 37 минут
Решил проблему. Убрал все наследования и вынес объявления объектов за пределы классов.
Теперь достаточно только хедеры подключить
0
dimkaok
1 / 1 / 4
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 21:41  [ТС] #17
Можете, пожалуйста, еще кое-что подсказать?
Почему у меня для каждого объекта в программе выдает две ошибки:
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "o_enemy"
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает
0
Миниатюры
error C2504: CMove: не определен базовый класс  
20.04.2013, 21:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.04.2013, 21:41
Привет! Вот еще темы с решениями:

error C2504: 'TwoDimentinalShape' : base class undefined
Всем здравствуте, мой конкретный класс не видит свой абстрактный класс, может я...

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt;...

Базовый класс Complex и производный класс для реализации квадратных матриц
1) Создайте базовый класс Complex (комплексное число) для реализации...

Класс: как обратиться к методу производного класса через итератор на базовый класс?
Есть абстрактный и два порожденных. Хочу создать например list&lt;Base*&gt; list1;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru