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

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

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

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

20.04.2013, 23:16. Просмотров 1038. Ответов 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...

25
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 01:37  [ТС] #16
Цитата Сообщение от Croessmah Посмотреть сообщение
автор в ступоре.
Читайте про раздельную компиляцию
Да, автор и правда в ступоре) Ладно, буду читать.
А вообще, можете сказать, где правильно определять экземпляры?
А то в книгах, по которым я занимался, они только в main определяются
0
Croessmah
Эксперт CЭксперт С++
13424 / 7578 / 856
Регистрация: 27.09.2012
Сообщений: 18,668
Записей в блоге: 3
Завершенные тесты: 1
21.04.2013, 01:44 #17
Цитата Сообщение от dimkaok Посмотреть сообщение
они только в main определяются
там же и определяйте.
Чтобы в других файлах был доступен именно этот экземпляр, сделайте его с внешней(external) линковкой.
0
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" не определен
}
}
0
stima
485 / 337 / 38
Регистрация: 22.03.2011
Сообщений: 1,079
Завершенные тесты: 2
21.04.2013, 03:14 #19
Мой вам совет, сделайте шаг назад. Почитайте немного. Просто очень тяжело будет Вам обьяснить что-то когда Вы не владеете терминологией и/или определенными знаниями.

А также для для составления толковой даже очень не значительной консольной игры нужны хотя-бы минимальные знания о архитектуре приложения. А сюда уже идут поровозом паттерны и прочее.
0
kravam
быдлокодер
1697 / 884 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
21.04.2013, 09:04 #20
dimkaok, а где у тебя, с позволения спросить, файл CMove.h? Ты его подключать подключаешь, а его нет.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.04.2013, 11:32 #21
Цитата Сообщение от kravam Посмотреть сообщение
dimkaok, а где у тебя, с позволения спросить, файл CMove.h? Ты его подключать подключаешь, а его нет.
Вероятно, это тот, который назван CMove.cpp
0
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
21.04.2013, 11:38  [ТС] #22
Цитата Сообщение от stima Посмотреть сообщение
Мой вам совет, сделайте шаг назад. Почитайте немного
Да я, дело в том, что уже прочитал Лафоре "ООП в C++" и еще много чего, и теперь,
чтобы закрепить материал, решил написать небольшой проект. Я еще много не знаю,
но только лишь читать книги и выполнять задачи из конца главы - тоже не дело.

Цитата Сообщение от kravam Посмотреть сообщение
а где у тебя, с позволения спросить, файл CMove.h? Ты его подключать подключаешь, а его нет.
Он есть. Всего 13 файлов, я просто не стал все здесь приводить
0
Миниатюры
Подскажите, почему для каждого объекта в программе выдает две ошибки  
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
24.04.2013, 14:35  [ТС] #23
Кажется, я немного продвинулся с этой проблемой.
Вынес определения всех объектов программы в отдельный хедер:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#ifndef _OBJECTS_H_
#define _OBJECTS_H_
 
#include "CBattle.h"
#include "CField.h"
#include "CGameCicle.h"
#include "CMessages.h"
#include "CMove.h"
#include "CPlayer.h"
 
namespace obj {
    extern CPlayer    o_player;
    extern CPlayer    o_enemy;
    extern CMessages  o_messageBox;
    extern CField     o_field;
    extern CBattle    o_battle;
    extern CMove      o_move;
    extern CGameCicle o_game;
}
 
#endif // _OBJECTS_H_
И подключил его во все *.cpp - файлы, где используются эти объекты
Но теперь другие ошибки выдает:
0
Миниатюры
Подскажите, почему для каждого объекта в программе выдает две ошибки  
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.04.2013, 14:43 #24
Цитата Сообщение от dimkaok Посмотреть сообщение
Вынес определения всех объектов программы в отдельный хедер:
Есть файл, в котором объекты объявлены без "extern"?
0
stima
485 / 337 / 38
Регистрация: 22.03.2011
Сообщений: 1,079
Завершенные тесты: 2
24.04.2013, 15:18 #25
Почитайте про экстерн. Если кратко Вы сказали: "У меня есть вот столько внешних обьектов." Компилятор вам сказал: "Хорошо". Линкер же в панике: "Ну и где эти .... обьекты".

Добавлено через 1 минуту
А вообще вы уже архитектурно не правы. Куча статики и Все знают о всех.
0
dimkaok
1 / 1 / 0
Регистрация: 06.03.2013
Сообщений: 128
24.04.2013, 15:56  [ТС] #26
Цитата Сообщение от Tulosba Посмотреть сообщение
Есть файл, в котором объекты объявлены без "extern"?
Нет, это я уже ошибся, убрал отовсюду extern

Цитата Сообщение от stima Посмотреть сообщение
А вообще вы уже архитектурно не правы. Куча статики и Все знают о всех
В смысле куча статики? У меня только константные переменные статичные. А то, что все объекты
в одном месте, то да, тут я подозреваю, что-то не то я сделал

Можете, пожалуйста, посмотреть мой код?
Я там уже все дописал, мне только нужно объекты правильно определить
0
Вложения
Тип файла: zip C++ RPG.zip (16.1 Кб, 3 просмотров)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2013, 15:56
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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