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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
#1

Взаимосвязанные исходные файлы - C++

08.10.2012, 17:35. Просмотров 1167. Ответов 29
Метки нет (Все метки)

Как сделать так чтобы в одном исходном файле я мог использовать элементы из другого и наоборот. А то я делаю змейку и у меня не получается сделать чтобы в классе Snake был указатель на Food и в Food указатель на Snake. Я понял что причина в инклуде в основном исходнике, что исходник объявленный ниже, знает про верхний, но нижний не может знать о верхней(((
C++
1
2
#include "Food.cpp" // Не знает Snake
#include "Snake.cpp" // Знает Food
Как сделать так что бы все 2 исходника друг друга знали?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2012, 17:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Взаимосвязанные исходные файлы (C++):

не понимаю как открыть исходные файлы - C++
не понимаю как открыть исходные файлы

Взаимосвязанные классы. Объявление - C++
есть два класса океан и клетка. Нужно их описать. Хочу сделать это в рамках одного .h файла в одном и том же пространстве имён Game ...

Захватить исходные данные из файла - C++
Доброе утро! Собственно вопрос: есть некое выражение, ну пускай упростим до (a+b) / b^2 и возьмем значения для теста a = 1000; b =...

Вычислить исходные математические выражения - C++
С учетом следующих исходных данных вычислить исходные математические выражения на языке С++ Написать реализацию заданной работы на ЭВМ с...

Как прописать в коде исходные СЛАУ - C++
Дано 6 уравнений с 6 ю неизвестными, как их прописать в коде что бы каждый раз их не вводить Уравнения: I1+I4-I2=0 I5+I3-I2=0 ...

Как получить исходные данные из 10-й строки файла? - C++
При написании консольного приложения на visual-studio, возникла проблема, мне надо получить исходные данные из 10 строки файла text1.txt,...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
08.10.2012, 19:44 #16
Цитата Сообщение от Nixy Посмотреть сообщение
в Shanke.h добавь
C++
1
#define SnakeH
в Food.h вместо
C++
1
#include "Shake.h"
запиши
C++
1
2
3
#ifndef SnakeH 
#include "Snake.h"
#endif
Не так.
В snake.h пишите так:
C++
1
2
#pragma once//это первая строка файла!
//остальной текст
В остальных *.h файлах аналогично
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
08.10.2012, 19:46 #17
I.M., разве мой макрос рабоать не будет?
0
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
08.10.2012, 19:49 #18
Nixy, будет, но раз уж учите использовать макросы для include guard, то хотя бы пишите их в нужном месте. ТС же новичек. Сейчас неверно запомнит и будет долго так писать.
Или в своих проектах вы так же все хедеры подключаете, обрамляя их дефайнами?
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
08.10.2012, 19:59 #19
Цитата Сообщение от I.M. Посмотреть сообщение
Nixy, будет, но раз уж учите использовать макросы для include guard, то хотя бы пишите их в нужном месте. ТС же новичек. Сейчас неверно запомнит и будет долго так писать.
Или в своих проектах вы так же все хедеры подключаете, обрамляя их дефайнами?
за меня RAD Studio дефайны раставила ) , я сам новичок , просто знаю что это работает
0
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
08.10.2012, 20:01  [ТС] #20
Цитата Сообщение от I.M. Посмотреть сообщение
Nixy, будет, но раз уж учите использовать макросы для include guard, то хотя бы пишите их в нужном месте. ТС же новичек. Сейчас неверно запомнит и будет долго так писать.
Или в своих проектах вы так же все хедеры подключаете, обрамляя их дефайнами?
С прагмой уанс почти тоже самое

1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Food.h(16): error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Food.h(16): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Food.h(16): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Food.h(19): error C2059: синтаксическая ошибка: *
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
08.10.2012, 20:07 #21
ну это ошибки уже не по поводу подключения , выложи только Food чтоб посмотреть на какой строчке ругань компилятора
0
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
08.10.2012, 23:00  [ТС] #22
Вообщем вот исходники

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//Snake.h
#pragma once
 
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include "Food.h"
 
using namespace std;
using namespace System;
 
struct SnakeBody
{
    COORD Position;
};
 
class Snake
{
public:
    ConsoleKeyInfo Key; int Score; // Переменные нажатой клавиши и очков
    Border *border; // Указатель на объект границы
    Food *food; // Указатель на объект еды
    int Speed; // Переменная скорости змейки
    SnakeBody Body[100]; // Массив частей тела змейки
    int Lenght; // Переменная длины змейки
    int Direction; // Переменная направления змейки
    Snake(int X, int Y, Border *border, Food *food);
    // Конструктор змейки. В аргументах: координаты головы змейки, граница и еда
 
    int SetPos(int x, int y);
 
    int Start();
 
    void WriteScore(); // Вывести очки на экран
 
    void WriteSnake(); // Нарисовать змейку
 
    void WipeSnake(); // Стереть змейку
 
    void Write(); // Нарисовать часть тела
 
 
    void WriteXY(int x, int y); // Нарисовать часть тела
    
    void Wipe(); // Стереть часть тела
 
 
    void WipeXY(int x, int y); // Стереть часть тела по координатам
 
    void CursorToHead(); // Переместить курсор на голову ( чтобы не мешался :) )
 
};
 
//===========================================================
//Food.h
#pragma once
 
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <stdlib.h>
#include "Snake.h"
 
using namespace std;
using namespace System;
 
class Food
{
public:
    COORD Position;
    Border *border;
    Snake *snake;
int Food::random(int x, int y); // Функция для генерации случайного числа в диапазоне от x до y
 
Food::Food(Border *border, *snake);
 
void Food::setPos(); // Функция для изменения позиции еды
 
void WriteXY(int x, int y); // Функция для рисования еды
};
Ошибки

1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Snake.h(22): error C2143: синтаксическая ошибка: отсутствие ";" перед "*"
1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Snake.h(22): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Snake.h(22): error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Snake.h(27): error C2061: синтаксическая ошибка: идентификатор "Food"
1>c:\users\i.main\documents\visual studio 2010\projects\oldsnake\snake\Food.h(20): error C2059: синтаксическая ошибка: *

Не знаю что теперь делать

Добавлено через 29 минут
Цитата Сообщение от Nixy Посмотреть сообщение
ну это ошибки уже не по поводу подключения , выложи только Food чтоб посмотреть на какой строчке ругань компилятора
Выложил
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
08.10.2012, 23:44 #23
ошибки еше актуальны ты исправлял что нибудь?
0
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
09.10.2012, 14:20  [ТС] #24
Цитата Сообщение от Nixy Посмотреть сообщение
ошибки еше актуальны ты исправлял что нибудь?
Нет. Не могу понять что происходит, вроде бы все правильно
0
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
09.10.2012, 16:50 #25
Так Вы же два заголовка друг в друга подключаете. Если два класса используют друг друга, нужно использовать, как уже говорили, предваряющее объявление:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//snake.h:
#ifndef SNAKE_H
#define SNAKE_H
 
#   include <много всего>
 
    class Food;
 
    class Snake {
        //...
    };
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
//food.h:
#ifndef FOOD_H
#define FOOD_H
 
#   include <много всего>
#   include "snake.h"
 
    class Food {
        //...
    };
 
#endif
0
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
09.10.2012, 17:07  [ТС] #26
Цитата Сообщение от Кот Ангенс Посмотреть сообщение
Так Вы же два заголовка друг в друга подключаете. Если два класса используют друг друга, нужно использовать, как уже говорили, предваряющее объявление:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//snake.h:
#ifndef SNAKE_H
#define SNAKE_H
 
#   include <много всего>
 
    class Food;
 
    class Snake {
        //...
    };
 
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
//food.h:
#ifndef FOOD_H
#define FOOD_H
 
#   include <много всего>
#   include "snake.h"
 
    class Food {
        //...
    };
 
#endif
У меня все ровно не получается. Вот вам проект. Можете сами посмотреть?
0
Вложения
Тип файла: rar OldSnake.rar (5.93 Мб, 2 просмотров)
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.10.2012, 17:08 #27
я тебе в ЛС писал что ошибки в уже в Апликации , отношение к подключению не имеют =(
0
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
09.10.2012, 17:37  [ТС] #28
Цитата Сообщение от Nixy Посмотреть сообщение
я тебе в ЛС писал что ошибки в уже в Апликации , отношение к подключению не имеют =(
Здесь похожая ситуация. Апликация не знает ни Snake ни Food, но при этом все подлючено
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.10.2012, 17:39 #29
в ней ты можешь либо Snake.h либо Food.h подключить
0
PedRo87
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 57
09.10.2012, 17:41  [ТС] #30
Цитата Сообщение от Nixy Посмотреть сообщение
в ней ты можешь либо Snake.h либо Food.h подключить
Во всех двух случаях ошибка
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2012, 17:41
Привет! Вот еще темы с ответами:

Объединить несколько разных структур в одну, не удаляя исходные - C++
Как можно объединить несколько разных структур в одну??...не удаляя их..

Написать выражение, исходные данные которого вводятся из файла - C++
Написать выражение. Исходные данные вводятся из файла. Вычисление оформить в виде функции, в которую передается имя файла с исходными...

Написать программу исследуемой функции, исходные данные подобрать самостоятельно - C++
Помогите пожалуйста написать программу на языке С++. 1.Составить алгоритм и программу для предложенного варианта. Исходные данные...

Алгоритм быстрой сортировки. Каким образом меняются исходные индексы? - C++
del


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

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

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