Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2011, 16:54   #1
JustTema
Новичок
Джуниор
 
Регистрация: 08.02.2010
Сообщений: 2
По умолчанию Использование header файла

Я пишу небольшую консольную игрушку и столкнулся с небольшой проблемой.
Собственно, оная (ниже см. исходники): у меня есть два файла сpp и один заголовочный. В заголовочном сделал объявления функций и вместе с определением объявил несколько переменных. Пара из которых константные.
Загловочный файл я подключаю к обоим файлам сpp. Всё бы хорошо, но при компиляции получаю пару ошибок
Цитата:
1>psG.obj : error LNK2005: "int turn" (?turn@@3HA) уже определен в main.obj
1>psG.obj : error LNK2005: "bool playerTurn" (?playerTurn@@3_NA) уже определен в main.obj
1>E:\MyProjects\teachprogr\Debug\Ps eudo-game.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
То есть эти две переменные компилятор не устраивают, а другие константные его устраивают. Пока не понял в чем прикол.

Need help

Сам заголовок:
psG.h
Код:
#pragma once

#include <iostream>
#include <clocale>
#include <conio.h>
#include <stdlib.h>

using namespace std;

enum direction { west = 75, north = 72, east = 77, south = 80 };


struct tank
{
	int itsX;
	int itsY;
	int itsFuel;
};


int turn = 1;
bool playerTurn = true;
const int width = 20;
const int height = 20;

void game_init(char map[height][width]);
int movement(tank&, direction, char map[height][width]);
void show(tank&, tank&, char map[height][width]);
int input(tank&, char map[height][width]);
int ai(tank&, char map[height][width]);
Дальше основная программа

main.cpp
Код:
#pragma once
#include "psG.h"

int main()
{
	setlocale(LC_CTYPE,"Russian");

//Initialising
	
	tank player = { 0, 0, 20 };
	tank computer = { 20, 20, 20 };
	int error = 0;
	char map[height][width];

	game_init (map);

//Work

	while (1)
	{
		show(player, computer, map);
		if (playerTurn == true)
		{
			error = input(player, map);
		}
		else 
		{
			error = ai(computer, map);
		}
		if (error == 1)
		{
			break;
		}
		playerTurn = !playerTurn;
	}
	_getch();
	return 0;
}
psG.cpp (удалил определения функций из-за ненужности)
Код:
#include "psG.H"

///////////////////////////
// Функция инициализации //
///////////////////////////
void game_init(char map[height][width])
{

}

////////////////////////////////
// Функция ввода с клавиатуры //
////////////////////////////////
int input(tank& itsTank, char map[height][width])
{

}

////////////////
// Функция ИИ //
////////////////
int ai(tank& itsTank, char map[height][width])
{

}

////////////////////////////
// Функция движения танка //
////////////////////////////
int movement(tank& itsTank, direction direct, char map[height][width])
{

}

///////////////////////////
// Функция вывода данных //
///////////////////////////
void show(tank& player, tank& computer, char map[height][width])
{

}

Последний раз редактировалось JustTema; 27.03.2011 в 16:56.
JustTema вне форума Ответить с цитированием
Старый 27.03.2011, 18:52   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Цитата:
То есть эти две переменные компилятор не устраивают, а другие константные его устраивают. Пока не понял в чем прикол.
Значит теорию оптимизации плохо учили. Скорее всего констант в бинарике нет, компилятор их подставил.
А с переменными ему так нельзя. В хедере объвите их екстерн и в одном из цпп-фалов объвите без екстерн.
p51x вне форума Ответить с цитированием
Старый 27.03.2011, 19:19   #3
JustTema
Новичок
Джуниор
 
Регистрация: 08.02.2010
Сообщений: 2
Вопрос

Цитата:
Сообщение от p51x Посмотреть сообщение
Значит теорию оптимизации плохо учили. Скорее всего констант в бинарике нет, компилятор их подставил.
А с переменными ему так нельзя. В хедере объвите их екстерн и в одном из цпп-фалов объвите без екстерн.
Учитывая, что я пока в школе, до теории оптимизации я не дошел)
В заголовке определил их как extern, но выдаёт те же ошибки.
Вы написали, что нужно потом объявить их без extern. А при объявлении в заголовочном нельзя их сразу определить?

Можете объяснить команду extern? Или хотя бы ссылочку.

В заголовочном сразу определил переменные.
В основном (main) просто объявил эти переменные, без определения: выдало ошибки
Цитата:
1>e:\myprojects\teachprogr\pseudo-game\main.cpp(4): error C2086: int turn: переопределение
1> e:\myprojects\teachprogr\pseudo-game\psg.h(19): см. объявление "turn"
1>e:\myprojects\teachprogr\pseudo-game\main.cpp(5): error C2086: bool playerTurn: переопределение
1> e:\myprojects\teachprogr\pseudo-game\psg.h(20): см. объявление "playerTurn"

Последний раз редактировалось Stilet; 27.03.2011 в 20:16.
JustTema вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование информации из текстового файла.. hen Общие вопросы Delphi 10 22.05.2010 13:10
[Lazarus\Delphi] Использование информации из текстового файла.. hen Lazarus, Free Pascal, CodeTyphon 1 19.05.2010 22:44
Использование информации атрибута файла для таблицы Excel choky Microsoft Office Excel 5 11.02.2010 16:17
Использование .txt файла из ресурсов Flicker Win Api 3 29.10.2009 20:39