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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
#1

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

20.04.2013, 23:16. Просмотров 1026. Ответов 25
Метки нет (Все метки)

Вот ошибки:
error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "o_enemy"
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает

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

#c++ Написал программу, qt выдает ошибки напротив cout по всей программе. Подскажите почему - C++
#include <QCoreApplication> #include <iostream> #include <iomanip> #include <ctime> #include <cstdlib> #include <cmath> using...

Почему программа не работает и выдает ошибки? - C++
Здравствуйте! У меня программа выдает следующие ошибки: 1. vcl.h: No such file or directory. 2. In function `int main()': 3. ...

Подскажите почему выдает ошибку? - C++
#include <iostream> using namespace std; int main(){ int a,b,c,x1,x2,dx; cout<< "Inter a="; cin >> a; cout<< "Inter b=";...

подскажите, почему программа выдает ошибку? - C++
задание примерное такое: на заданном интервале посчитать значение ряда Тейлора с заданным шагом и точностью. Исправьте, если сможете....

Подскажите, где ошибки в программе - C++
#include <conio.h>//підключеннябібліотек #include <stdio.h> #include <string.h> #include <stdlib.h> class Och//класочередь { ...

Подскажите кто может и найдите ошибки в программе)) - C++
#include <stdio.h> #include <conio.h> #define ROWS 3 #define COLS 3 void Changenrow(int, int , int, int; void dobaviti(int&, int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
20.04.2013, 23:18  [ТС] #2
Пишу в visual studio 12
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
20.04.2013, 23:35 #3
У меня личный вопрос, вот вы взялись писать игру, но я по коду вижу, что Вы совершенно не понимаете, что происходит, возможно стоит подучится немного, на примерчиках по проще?

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

Добавлено через 1 минуту
Цитата Сообщение от stima Посмотреть сообщение
Ответ на Ваш вопрос, компилятору не известен тип CPlayer или подключите обьявление, или сделайте форвард декларацию (если вы не будете работать с ним как с полным типом)
Файл с объявлением подключен в файле CMessages.h, который я подключил в данном файле
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
20.04.2013, 23:58 #5
dimkaok, в CMessages.h вероятно точки с запятой нет после определения класса. Покажите код.
0
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_
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
21.04.2013, 00:06 #7
Цитата Сообщение от dimkaok Посмотреть сообщение
Файл с объявлением подключен в файле CMessages.h, который я подключил в данном файле
Где?
0
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 00:09  [ТС] #8
Цитата Сообщение от stima Посмотреть сообщение
Где?
В CBattle.h подключен CMessages.h, в котором подключен CMove.h, в котором подключен CPlayer.h, в котором и определен класс
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
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"
Вы знаете как работает раздельная компиляция? Вы знаете как работает препроцессор? Вы знаете, что такое инклуд гварды?
0
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 Посмотреть сообщение
Вы знаете как работает раздельная компиляция?
Если честно, то впервые слышу о таком Уже гуглю. А ошибка с этим связана?
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
21.04.2013, 00:23 #11
1. Вы не можете "создать" экземляры в хедерах.
2. Да и пункт 1 тоже сюда.
1
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 00:28  [ТС] #12
Цитата Сообщение от stima Посмотреть сообщение
Вы не можете "создать" экземляры в хедерах
А где их создавать? В *.cpp?
А как можно исправить проблему раздельной компиляции?
0
stima
473 / 322 / 30
Регистрация: 22.03.2011
Сообщений: 1,046
Завершенные тесты: 2
21.04.2013, 00:52 #13
1. Смотря что Вам надо.
2. Это проблема решиться с 1.
0
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 01:20  [ТС] #14
Мне нужно создать экземпляр и работать с ним.
А так-же иметь возможность работать с этим экземпляром из других классов.
Поэтому я вынес определение экземпляра в хеадер, чтобы, подключив файл с объявлением,
данный экземпляр стал доступен из других классов
0
Croessmah
Эксперт CЭксперт С++
13226 / 7498 / 845
Регистрация: 27.09.2012
Сообщений: 18,417
Записей в блоге: 3
Завершенные тесты: 1
21.04.2013, 01:28 #15
Вам нужен глобальный объект этого класса?
Тогда читайте про extern

Добавлено через 1 минуту
Цитата Сообщение от dimkaok Посмотреть сообщение
подключив файл с объявлением
и создав в каждом cpp по одному экземпляру этого объекта. В результате линкер в шоке, автор в ступоре.
Читайте про раздельную компиляцию
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 01:28
Привет! Вот еще темы с ответами:

есть ошибки в программе, может что то с компилятором у меня, подскажите пожалуйста. - C++
Программа для решения обычных уравнений методом адамса, не работает.... 3 ошибки здесь: #include &lt;math.h&gt; #include &lt;stdio.h&gt; const...

Как создать отдельную функцию для каждого объекта класса - C++
Ну например есть класс struct Class { void onUpdate (); } Мне надо сделать так, что бы у объекта obj1 типа Class функция...

Нужно ли создавать новый Render для каждого нового объекта (SDL2)? - C++
Есть окно сделанное с помощью SDL2 и класс объекта. Нужно нарисовать множество таких объектов, которые будут менять свои характеристики...

Зачем в программе 2 раза вызывать конструктор для одного объекта - C++
Здравствуйте, специалисты! Попалась в руки программа, похожая на то что мне надо сделать, начал разбираться и недоумеваю - зачем два раза...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.04.2013, 01:28
Ответ Создать тему
Опции темы

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