Форум программистов, компьютерный форум CyberForum.ru

Подскажите, почему для каждого объекта в программе выдает две ошибки - C++

Восстановить пароль Регистрация
 
 
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 23:16     Подскажите, почему для каждого объекта в программе выдает две ошибки #1
Вот ошибки:
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "o_enemy"
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает

В чем может быть причина?
Миниатюры
Подскажите, почему для каждого объекта в программе выдает две ошибки  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2013, 23:16     Подскажите, почему для каждого объекта в программе выдает две ошибки
Посмотрите здесь:

Подскажите кто может и найдите ошибки в программе)) C++
C++ подскажите, почему программа выдает ошибку?
есть ошибки в программе, может что то с компилятором у меня, подскажите пожалуйста. C++
C++ Подскажите почему выдает ошибку?
Здравствуйте, подскажите пожалуйста, где я допустил ошибку(При вынесении кода в отдельную функцию, выдает ошибки) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 23:18  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #2
Пишу в visual studio 12
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 928
Завершенные тесты: 1
20.04.2013, 23:35     Подскажите, почему для каждого объекта в программе выдает две ошибки #3
У меня личный вопрос, вот вы взялись писать игру, но я по коду вижу, что Вы совершенно не понимаете, что происходит, возможно стоит подучится немного, на примерчиках по проще?

п.с. Ответ на Ваш вопрос, компилятору не известен тип CPlayer или подключите обьявление, или сделайте форвард декларацию (если вы не будете работать с ним как с полным типом)
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 23:41  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #4
Цитата Сообщение от stima Посмотреть сообщение
У меня личный вопрос, вот вы взялись писать игру, но я по коду вижу, что Вы совершенно не понимаете, что происходит, возможно стоит подучится немного, на примерчиках по проще?
Можно я сам разберусь, когда и что мне писать? И было-бы полезней, если-бы вы просто сказали, что я не так написал

Добавлено через 1 минуту
Цитата Сообщение от stima Посмотреть сообщение
Ответ на Ваш вопрос, компилятору не известен тип CPlayer или подключите обьявление, или сделайте форвард декларацию (если вы не будете работать с ним как с полным типом)
Файл с объявлением подключен в файле CMessages.h, который я подключил в данном файле
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.04.2013, 23:58     Подскажите, почему для каждого объекта в программе выдает две ошибки #5
dimkaok, в CMessages.h вероятно точки с запятой нет после определения класса. Покажите код.
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 00:03  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #6
Цитата Сообщение от Tulosba Посмотреть сообщение
в CMessages.h вероятно точки с запятой нет после определения класса. Покажите код.
Вот код из четырех файлов:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// CMessages.h
#ifndef _CMESSAGES_H_
#define _CMESSAGES_H_
 
#include "CMove.h"
 
// 'm_' is means 'message'
 
class CMessages {
    
  public:
 
      CMessages();
      ~CMessages();
 
      void m_cleanScreen() const; //-
      void m_switchDefault() const;
 
      void m_startGame() const;
      void m_endGame() const;
      void m_mainMenuChoice() const;
 
      void m_youWinBattle() const;
      void m_youLoseBattle() const;
      void m_doYouWantToRun() const;
 
      void m_chooseDirectionToMove() const;
      void m_youCanNotMoveUp() const;
      void m_youCanNotMoveBottom() const;
      void m_youCanNotMoveLeft() const;
      void m_youCanNotMoveRight() const;
 
      void m_youFoundFood() const;
      void m_youFoundEnemy() const;
      void m_youFoundWeapon() const;
      void m_youFoundHome() const;
      void m_youFoundNothing() const;
 
      void youHaveNotFood() const;
      void youAreEatFood() const;
 
      void sleep() const;
      void sleepAtHome() const;
 
      void m_infoHealthPlayer();
      void m_infoHealthEnemy();
};
 
#endif // _CMESSAGES_H_
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// CBattle.h
#ifndef _CBATTLE_H_
#define _CBATTLE_H_
 
#include "CMessages.h"
 
    CPlayer o_enemy;
 
class CBattle {
    
  public:     
 
      CBattle() : isBattleEnd(false), doYouWantToRun(0) {}
      CBattle(bool battleEnd, char run) : isBattleEnd(battleEnd),
                                          doYouWantToRun(run) {}
      ~CBattle();
 
      void startBattleCicle();
      void playerAttack();
      void enemyAttack();
 
  private:
 
      bool isBattleEnd;
      char doYouWantToRun;
};
 
#endif // _CBATTLE_H_
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// CPlayer.h
#ifndef _CPLAYER_H_
#define _CPLAYER_H_
 
#include "CMove.h"
#include <cstdlib>
 
#include "CMove.h"
 
class CPlayer {
    
  public:
      
      CPlayer() : health(100),
                  food(0),
                  damage(_minDamage + additionalDamage + rand() %
                        ((_maxDamage + 1 + additionalDamage) -
                         _minDamage + additionalDamage)),
                  additionalDamage(0),
                  playerPositionX(8),
                  playerPositionY(8) {}
 
      CPlayer(int h, int f, int d, int aD,
              int ppX, int ppY) : health(h),
                                  food(f),
                                  damage(d),
                                  additionalDamage(aD),
                                  playerPositionX(ppX),
                                  playerPositionY(ppY) {}
 
      ~CPlayer();
 
      static const int _minDamage = 10;
      static const int _maxDamage = 20;
 
      void eat();
      void sleep();
 
      int getHealth() { return health; }
      int getFood()   { return food; }
      int getDamage() { return damage; }
      int getAdditionalDamage() { return additionalDamage; }
      int getPlayerPositionX()  { return playerPositionX; }
      int getPlayerPositionY()  { return playerPositionY; }
 
      void setHealth(int variable) { health = variable; }     
      void setFood(int variable)   { food += variable; }
      void setDamage(int variable) { damage = variable; }
      void setAdditionalDamage(int variable) { additionalDamage += variable; }
      void setPlayerPositionX(int variable)  { playerPositionX += variable; }
      void setPlayerPositionY(int variable)  { playerPositionY += variable; }
 
      void setBattleHealth(int variable) { health += variable; }
 
  private:
 
      int health;
      int food;
      int damage;
      int additionalDamage;
 
      int playerPositionX;
      int playerPositionY;
};
 
#endif // _CPLAYER_H_
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//CMove.cpp
#ifndef _CMOVE_H_
#define _CMOVE_H_
 
#include "CPlayer.h"
#include "CMessages.h"
#include "CField.h"
#include "CBattle.h"
#include "CGameCicle.h"
#include <iostream>
 
      CPlayer   o_player;
      CMessages o_messageBox;
      CField    o_field;
      CBattle   o_battle;
 
class CMove {
    
  public:
 
      CMove() : choosenDirectionToMove(0) {}
      CMove(int direction) : choosenDirectionToMove(direction) {}
      ~CMove();
 
      void movePlayerOnTheMap();
      bool isItMapBorder(int);
      void checkForItemsOnTheMap(int, int);
 
  private:
 
      int choosenDirectionToMove;
      enum {UP, BOTTOM, LEFT, RIGHT};
};
 
#endif // _CMOVE_H_
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 928
Завершенные тесты: 1
21.04.2013, 00:06     Подскажите, почему для каждого объекта в программе выдает две ошибки #7
Цитата Сообщение от dimkaok Посмотреть сообщение
Файл с объявлением подключен в файле CMessages.h, который я подключил в данном файле
Где?
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 00:09  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #8
Цитата Сообщение от stima Посмотреть сообщение
Где?
В CBattle.h подключен CMessages.h, в котором подключен CMove.h, в котором подключен CPlayer.h, в котором и определен класс
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 928
Завершенные тесты: 1
21.04.2013, 00:18     Подскажите, почему для каждого объекта в программе выдает две ошибки #9
Цитата Сообщение от dimkaok Посмотреть сообщение
CPlayer * o_player;
* * * CMessages o_messageBox;
* * * CField * *o_field;
* * * CBattle * o_battle;
Это не c ++. Что вы хотите этим сказать?

Цитата Сообщение от dimkaok Посмотреть сообщение
#include "CPlayer.h"
#include "CMessages.h"
Вы знаете как работает раздельная компиляция? Вы знаете как работает препроцессор? Вы знаете, что такое инклуд гварды?
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 00:22  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #10
Цитата Сообщение от stima Посмотреть сообщение
CPlayer * o_player;
* * * CMessages o_messageBox;
* * * CField * *o_field;
* * * CBattle * o_battle;
Это не c ++. Что вы хотите этим сказать?
В смысле? Это создание экземпляров классов.

Цитата Сообщение от stima Посмотреть сообщение
Вы знаете как работает раздельная компиляция?
Если честно, то впервые слышу о таком Уже гуглю. А ошибка с этим связана?
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 928
Завершенные тесты: 1
21.04.2013, 00:23     Подскажите, почему для каждого объекта в программе выдает две ошибки #11
1. Вы не можете "создать" экземляры в хедерах.
2. Да и пункт 1 тоже сюда.
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 00:28  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #12
Цитата Сообщение от stima Посмотреть сообщение
Вы не можете "создать" экземляры в хедерах
А где их создавать? В *.cpp?
А как можно исправить проблему раздельной компиляции?
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 928
Завершенные тесты: 1
21.04.2013, 00:52     Подскажите, почему для каждого объекта в программе выдает две ошибки #13
1. Смотря что Вам надо.
2. Это проблема решиться с 1.
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 01:20  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #14
Мне нужно создать экземпляр и работать с ним.
А так-же иметь возможность работать с этим экземпляром из других классов.
Поэтому я вынес определение экземпляра в хеадер, чтобы, подключив файл с объявлением,
данный экземпляр стал доступен из других классов
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
21.04.2013, 01:28     Подскажите, почему для каждого объекта в программе выдает две ошибки #15
Вам нужен глобальный объект этого класса?
Тогда читайте про extern

Добавлено через 1 минуту
Цитата Сообщение от dimkaok Посмотреть сообщение
подключив файл с объявлением
и создав в каждом cpp по одному экземпляру этого объекта. В результате линкер в шоке, автор в ступоре.
Читайте про раздельную компиляцию
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 01:37  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #16
Цитата Сообщение от Croessmah Посмотреть сообщение
автор в ступоре.
Читайте про раздельную компиляцию
Да, автор и правда в ступоре) Ладно, буду читать.
А вообще, можете сказать, где правильно определять экземпляры?
А то в книгах, по которым я занимался, они только в main определяются
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11827 / 6806 / 769
Регистрация: 27.09.2012
Сообщений: 16,878
Записей в блоге: 2
Завершенные тесты: 1
21.04.2013, 01:44     Подскажите, почему для каждого объекта в программе выдает две ошибки #17
Цитата Сообщение от dimkaok Посмотреть сообщение
они только в main определяются
там же и определяйте.
Чтобы в других файлах был доступен именно этот экземпляр, сделайте его с внешней(external) линковкой.
dimkaok
 Аватар для dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 02:02  [ТС]     Подскажите, почему для каждого объекта в программе выдает две ошибки #18
Что-то не совсем понял. Перенес все определения экземпляров в main и подключил все хеадеры:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Main.cpp
#include "CGameCicle.h"
 
#include "CPlayer.h"
#include "CBattle.h"
#include "CField.h"
#include "CMessages.h"
#include "CMove.h"
 
int main() {
 
    extern CPlayer   o_player;
    extern CPlayer   o_enemy;
    extern CMessages o_messageBox;
    extern CField    o_field;
    extern CBattle   o_battle;
    extern CMove     o_move;      
 
    CGameCicle o_game;
    o_game.startGameCicle();
 
    return 0;
}
Но теперь не могу использовать эти экземпляры:
C++
1
2
3
4
5
6
// CPlayer.cpp
#include "CPlayer.h"
void CPlayer::eat() {
    o_messageBox.youAreEatFood();   // Error: Идентификатор "o_message" не определен
}
}
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 928
Завершенные тесты: 1
21.04.2013, 03:14     Подскажите, почему для каждого объекта в программе выдает две ошибки #19
Мой вам совет, сделайте шаг назад. Почитайте немного. Просто очень тяжело будет Вам обьяснить что-то когда Вы не владеете терминологией и/или определенными знаниями.

А также для для составления толковой даже очень не значительной консольной игры нужны хотя-бы минимальные знания о архитектуре приложения. А сюда уже идут поровозом паттерны и прочее.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 09:04     Подскажите, почему для каждого объекта в программе выдает две ошибки
Еще ссылки по теме:

данный код считает количество нечетных элементов в столбце , но он считает не для каждого столбца , как сделать , чтобы считал для каждого?подскажите C++
Почему программа не работает и выдает ошибки? C++
C++ Подскажите, где ошибки в программе

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

Или воспользуйтесь поиском по форуму:
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
21.04.2013, 09:04     Подскажите, почему для каждого объекта в программе выдает две ошибки #20
dimkaok, а где у тебя, с позволения спросить, файл CMove.h? Ты его подключать подключаешь, а его нет.
Yandex
Объявления
21.04.2013, 09:04     Подскажите, почему для каждого объекта в программе выдает две ошибки
Ответ Создать тему
Опции темы

Текущее время: 21:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru