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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Несколько логически ИЛИ в условии if http://www.cyberforum.ru/cpp-beginners/thread1242279.html
Здравствуйте! Вот такой, вроде бы несложный вопрос: Есть функция, в которую передается массив символов, далее она проверяет устраивает ли первый символ заданному критерию, если нет то возвращает нолик, если да единичку. Критерий таков: первый символ должен быть одним из этих -- A, B, C, E, H, K, M, O, P, T, X, Y. Передаю такой массив: A000AA Буква которые записаны в условии и массиве все в...
C++ Реверс двусвязного списка Столкнулся с задачей написать функцию реверса двусвязного списка. Часа 3 сушил себе мозг с копиями указателей, получилось что надо хранить копию данных и копию адреса 1 узла да еще и копировать все в ручную поэлементно. Выглядит очень громоздко... Так вот сам вопрос то, зачем вообще может понадобиться такая функция если список можно обойти в обоих направлениях ( задача из книги "Язык... http://www.cyberforum.ru/cpp-beginners/thread1242277.html
Калькулятор Z-1. Укажите на ошибку в программе к задаче C++
Уважаемые форумчане, укажите пожалуйста на ошибку в программе. Пишу программу к задаче, валится на 10 тесте (Wrong Answer). Подскажите, пожалуйста, что не так. Условие задачи: Имя входного файла: calcz.in Имя выходного файла: calcz.out Ограничение по времени: 2 секунды Ограничение по памяти: 64 мегабайта Компания Z готовится к выпуску своего супер пупер мега калькулятора Z-1. Ме-
C++ Проверить можно ли ходом короля из одной клетки попасть в другую
Делать было нечего решил все простые задачи перерешать с сайта. Ближе к делу: Поле шахматной доски определяется парой чисел (a, b), каждое от 1 до 8, первое число задает номер столбца, второе – номер строки. Заданы две клетки. Определите, может ли шахматный король попасть с первой клетки на вторую за один ход. Формат входных данных: Даны 4 целых числа от 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 1 Bytes (8bits) of data (0-255) подробнее

Показать сообщение отдельно
Aspirin
29 / 6 / 0
Регистрация: 05.10.2012
Сообщений: 117
13.08.2014, 23:18     Можно ли объявлять объекты в заголовочном файле?
Решил написать змейку с использование 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);
}
Если так делать нельзя, как можно по другому?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru