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

Можно ли объявлять объекты в заголовочном файле? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Несколько логически ИЛИ в условии if http://www.cyberforum.ru/cpp-beginners/thread1242279.html
Здравствуйте! Вот такой, вроде бы несложный вопрос: Есть функция, в которую передается массив символов, далее она проверяет устраивает ли первый символ заданному критерию, если нет то возвращает...
C++ Реверс двусвязного списка Столкнулся с задачей написать функцию реверса двусвязного списка. Часа 3 сушил себе мозг с копиями указателей, получилось что надо хранить копию данных и копию адреса 1 узла да еще и копировать все в... http://www.cyberforum.ru/cpp-beginners/thread1242277.html
Калькулятор Z-1. Укажите на ошибку в программе к задаче C++
Уважаемые форумчане, укажите пожалуйста на ошибку в программе. Пишу программу к задаче, валится на 10 тесте (Wrong Answer). Подскажите, пожалуйста, что не так. Условие задачи: Имя входного...
C++ Проверить можно ли ходом короля из одной клетки попасть в другую
Делать было нечего решил все простые задачи перерешать с сайта. Ближе к делу: Поле шахматной доски определяется парой чисел (a, b), каждое от 1 до 8, первое число задает номер столбца, второе –...
C++ Как удалять определенные значения из массива? http://www.cyberforum.ru/cpp-beginners/thread1242210.html
Пишу программу по одной задаче, в которой требуется удалить элементы, значение которых меньше среднего арифметического динамического массива. Думал, элемент возможно удалить с помощью delete", но это...
C++ Fopen не видит путь к файлу #include <stdio.h> #include <iostream> #include <fstream> #include <string> #include <vector> #include <map> typedef std::map<std::string, std::string> mapss; // An unsigned char can store... подробнее

Показать сообщение отдельно
Aspirin
29 / 6 / 0
Регистрация: 05.10.2012
Сообщений: 117

Можно ли объявлять объекты в заголовочном файле? - C++

13.08.2014, 23:18. Просмотров 354. Ответов 4
Метки (Все метки)

Решил написать змейку с использование OpenGL. Сначала написал все в одном файле, все работало, решил сделать по красивее и распихать по хедерам. Сразу вопрос: Можно ли объявлять объекты в заголовочном файле?
Из-за этого похоже у меня и ошибки:
C++
1
2
3
4
5
6
7
8
9
1>Food.obj : error LNK2005: "class Block * blocks" (?blocks@@3PAVBlock@@A) already defined in Block.obj
1>Food.obj : error LNK2005: "class Food food" (?food@@3VFood@@A) already defined in Block.obj
1>Food.obj : error LNK2005: "class Snake snake" (?snake@@3VSnake@@A) already defined in Block.obj
1>main.obj : error LNK2005: "class Block * blocks" (?blocks@@3PAVBlock@@A) already defined in Block.obj
1>main.obj : error LNK2005: "class Food food" (?food@@3VFood@@A) already defined in Block.obj
1>main.obj : error LNK2005: "class Snake snake" (?snake@@3VSnake@@A) already defined in Block.obj
1>Snake.obj : error LNK2005: "class Block * blocks" (?blocks@@3PAVBlock@@A) already defined in Block.obj
1>Snake.obj : error LNK2005: "class Food food" (?food@@3VFood@@A) already defined in Block.obj
1>Snake.obj : error LNK2005: "class Snake snake" (?snake@@3VSnake@@A) already defined in Block.obj
Я так сделал, т.к. некоторым классам нужен доступ к объектам других классов.
Вот некоторые файлы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Constants.h
#include "Block.h"
#include "Snake.h"
#include "Food.h"
 
#ifndef CONSTANTS_H
#define CONSTANTS_H
 
const int n = 16;                   //rows
const int m = 16;                   //columns
const int size_cell = 25;           //size x size of one cell
const int width = m*size_cell;      //width of window
const int height = n*size_cell;     //height of window
 
Snake   snake;
Block   blocks[width*height];           //body of snake
Food    food;
 
#endif CONSTANTS_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
//Food.cpp
#include "Food.h"
#include "Constants.h"
#include <cstdlib>
#include <time.h>
#include <glut.h>
 
void Food::spawn()
{
    srand(time(NULL));
    x = (rand() % m)*size_cell;
    y = (rand() % n)*size_cell;
    for (int i = 0; i < snake.size; i++)
    {
        if ((x == blocks[i].x) && (y == blocks[i].y))
            spawn();
    }
}
 
void Food::draw()
{
    glColor3f(1.0, 0.0, 0.0);
    glRectd(x, y, x + size_cell, y + size_cell);
}
Если так делать нельзя, как можно по другому?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru