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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2013, 11:54   #1
Flay
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 26
По умолчанию namespace без lib'ов

Доброго времени суток.
Подскажите, пожалуйста, где найти инфу по созданю namespace'ов, ну или если есть возможность, приведите пример.
Такая проблема:
Есть СРР файл, который должен использовать переменные и функции из namespace'а (main), но если я создаю в этом же проекте определение этого нэймспейса, то выпрыгивают ошибки, а вот если namespace разместить в библиотеке, то нормально компилится:
Код:
1>DHR.obj : error LNK2005: "class sp::Di::Halt* DHR::DiHaltRet" (?Terrain@zone@@3PAVMesh@scene@sp@@A) already defined in main.obj
1>DHR.obj : error LNK2005: "class sp::video::MeshBuffer * DHR::_Surface" (?_Surface@zone@@3PAVMeshBuffer@video@sp@@A) already defined in main.obj
Вот куски кода:
main.cpp
Код:
#include "DHR.h"
DHR.h
Код:
namespace DHR
{
di::halt* DiHaltRet(const break* param);
}
DHR.cpp
Код:
namespace DHR
{
di::halt* DiHaltRet(const break* param)
{
           ...
}
}
Flay вне форума Ответить с цитированием
Старый 29.09.2013, 14:21   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы случаем CPP файл не инклюдите?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.09.2013, 18:07   #3
Flay
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вы случаем CPP файл не инклюдите?
нет конечно
Flay вне форума Ответить с цитированием
Старый 29.09.2013, 20:56   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от Flay Посмотреть сообщение
нет конечно
Тогда, пожалуйста, покажите весь DHT.h
waleri вне форума Ответить с цитированием
Старый 29.09.2013, 22:59   #5
Flay
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 26
По умолчанию

Код:
#ifndef _ZONEMANAGER_H_
#define _ZONEMANAGER_H_

#include <Engine.hpp>
using namespace sp;

namespace zone
{
	int i;
	sp::scene::Mesh			*Terrain;
	video::MeshBuffer	*_SurfaceZ;

	static void addVertex(video::MeshBuffer &Surface, f32 x, f32 y, f32 z, f32 u = 0.0f, f32 v = 0.0f, f32 w = 0.0f)
	{
		Surface.addVertex(dim::vector3df(x, y, z), dim::vector3df(u, v, w));
	}

	static void addFace(video::MeshBuffer &Surface, u32 v0, u32 v1, u32 v2)
	{
		Surface.addTriangle(v0, v1, v2);
	}

	static void addFace(video::MeshBuffer &Surface, u32 v0, u32 v1, u32 v2, u32 v3)
	{
		Surface.addTriangle(v0, v1, v2);
		Surface.addTriangle(v0, v2, v3);
	}



	scene::Mesh* DesignTerrain(const video::Texture* TexHeightMap);
};

#endif
Вот полный код
Flay вне форума Ответить с цитированием
Старый 30.09.2013, 00:57   #6
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
sp::scene::Mesh *Terrain;
video::MeshBuffer *_SurfaceZ
Должны быть определены в .cpp файле, а в заголовочном файле должны быть только их определения.
Код:
#ifndef _ZONEMANAGER_H_
..
namespace zone
{
  extern int i;
  extern sp::scene::Mesh *Terrain;
  extern video::MeshBuffer *_SurfaceZ;
 ...
}

#endif

// .cpp
#include "ZoneManager.h"

namespace zone {
  int i;
  sp::scene::Mesh *Terrain;
  video::MeshBuffer *_SurfaceZ;
...
}
Кроме того, почему статические функции размещены в заголовочном файле? Также, не рекомендуется использовать глобальную using-директиву в заголовчных файлах во избежание непреднамеренного замусоривания глобального пространства имён, и возникающих в следствие этого коллизий.
netrino вне форума Ответить с цитированием
Старый 30.09.2013, 10:24   #7
Flay
Пользователь
 
Регистрация: 22.08.2010
Сообщений: 26
По умолчанию

Понятно, в чем ошибка была. Спасибо
Flay вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
error CS0234: The type or namespace name 'error_messages' does not exist in the namespace 'iTextSharp.text' jei_ C# (си шарп) 0 03.12.2012 11:45
Не смог подключить библиотеки (d3d10.lib,d3dx10.lib) Russel32 Visual C++ 1 09.05.2012 18:43
о namespace. Пепел Феникса Общие вопросы C/C++ 2 03.06.2010 20:39
использование конструкции "using <namespace>::<namespace-member>" happy_horror Общие вопросы C/C++ 5 08.03.2009 15:30
namespace std; lacost Общие вопросы C/C++ 8 22.10.2007 13:17