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

Непонятная ошибка с namespace - C++

Восстановить пароль Регистрация
 
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 17:38     Непонятная ошибка с namespace #1
Здраствуйте! Создаю типа хелпер для разных функций со своим пространством имен, что бы потом использовать так Helper::myFunc():
helper.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#if !defined(HELPER_H)
#define HELPER_H
 
#include <iostream>
#include <sstream>
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
 
namespace Helper
{
    typedef std::map<std::string, GLuint> TexturesIDS;
    TexturesIDS textures;
 
    GLuint LoadTexture(const std::string &filename);
    void DeleteTextures();
}
 
#endif
helper.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "helper.h"
 
namespace Helper
{
    GLuint LoadTexture(const std::string &filename)
    {
        //...
    }
    
    void DeleteTextures()
    {
        //...
    }
}
Подключаю в main.cpp
C++
1
#include "helper.h"
Программа компилируется и падает при запуске, а если просто вставлю в main.cpp код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace Helper
{
    typedef std::map<std::string, GLuint> TexturesIDS;
    TexturesIDS textures;
    
    GLuint LoadTexture(const std::string &filename)
    {
        //...
    }
    
    void DeleteTextures()
    {
        //...
    }
}
то всё нормально работает.
Подскажите пожалуйста в чём может быть проблема? В c++ новичёк. Программирую и компилирую в code::blocks mingw.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2014, 17:38     Непонятная ошибка с namespace
Посмотрите здесь:

Непонятная ошибка C++
C++ Возникает ошибка с using namespace std;
C++ vc++2008 ошибка cmath(21) : error C2039: 'acosf' : is not a member of '`global namespace''
Непонятная ошибка!? C++
Непонятная ошибка C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.05.2014, 17:50     Непонятная ошибка с namespace #2
Цитата Сообщение от GLS Посмотреть сообщение
то всё нормально работает.
скорее всего это случайность и ошибка таки есть в реализации этих функций или ещё где
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 17:53  [ТС]     Непонятная ошибка с namespace #3
Jupiter, в реализации функций ничего не меняется, почему то напрямую работает, а через инклуд нет
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.05.2014, 18:02     Непонятная ошибка с namespace #4
если падает при запуске - надо выяснить причину падения. Нужно пройти программу пошагово, применять точки-останова, выводить в лог сообщения обо всех исключительных ситуациях - так и выяснишь, что вызывает падение.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.05.2014, 18:17     Непонятная ошибка с namespace #5
GLS, точно компилируется? Тут глобальная переменная в заголовочном файле, которая попадает в два объектных файла - должен сругнуться линковщик.
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 18:21  [ТС]     Непонятная ошибка с namespace #6
0x10, судя по тому что показывает дебагер, так и есть, пишет что Helper::textures multiple definition. Как правильно исправить?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.05.2014, 18:28     Непонятная ошибка с namespace #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от GLS Посмотреть сообщение
Как правильно исправить?
1. Не использовать глобальные переменные.

Не по теме:

2. В заголовочном файле разместить объявление extern type var_name, а в cpp - определение.


3. Выполнить пункт 1.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
05.05.2014, 18:28     Непонятная ошибка с namespace #8
GLS, А! так TexturesIDS textures; это глобальная переменная!
Убери её из h файла
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 18:51  [ТС]     Непонятная ошибка с namespace #9
Век живи, век учись

Добавлено через 16 минут
0x10, подскажи пожалуйста, может есть какой другой способ сделать хелпер без глобальных переменных? И что бы его можно было без проблем использовать в других файлах.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.05.2014, 18:52     Непонятная ошибка с namespace #10
GLS, то, что я вижу, напрашивается на класс, у которого приватным полем будет контейнер текстур, а эти две функции - открытыми методами.
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 19:09  [ТС]     Непонятная ошибка с namespace #11
0x10, класс со static полями и методами?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.05.2014, 19:12     Непонятная ошибка с namespace #12
GLS, зачем? Будет опять та же глобалка, только чуть аккуратнее.
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 19:16  [ТС]     Непонятная ошибка с namespace #13
0x10, а как же тогда мне использовать один объект такого класса в разных файлах? Синглетон что ли?
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
05.05.2014, 19:23     Непонятная ошибка с namespace #14
GLS, А тут есть повод для синглтона? Я бы для начала параметром передавал его где он понадобится. Во всяком случае, переделать код с параметра функции на синглтон проще, чем наоборот.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 19:26     Непонятная ошибка с namespace
Еще ссылки по теме:

Непонятная ошибка C++
Непонятная ошибка C++
C++ Ошибка в yvals.h - Syntax error:missing ';' before 'namespace'

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

Или воспользуйтесь поиском по форуму:
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 19:26  [ТС]     Непонятная ошибка с namespace #15
0x10, ясно, подумаю над этим, спасибо большое.
Yandex
Объявления
05.05.2014, 19:26     Непонятная ошибка с namespace
Ответ Создать тему
Опции темы

Текущее время: 14:11. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru