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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
#1

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

05.05.2014, 17:38. Просмотров 286. Ответов 14
Метки нет (Все метки)

Здраствуйте! Создаю типа хелпер для разных функций со своим пространством имен, что бы потом использовать так 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++):

Возникает ошибка с using namespace std; - C++
#include &quot;stdio.h&quot; #include &quot;string.h&quot; #include &quot;math.h&quot; #include &quot;stdlib.h&quot; #include &quot;stdafx.h&quot; #include &quot;iostream.h&quot; using...

Ошибка в yvals.h - Syntax error:missing ';' before 'namespace' - C++
Изучаю c++, раньше работал в codeblocks, теперь перешёл на студию и столкнулся с такой ошибкой: error C2143: syntax error : missing ';'...

vc++2008 ошибка cmath(21) : error C2039: 'acosf' : is not a member of '`global namespace'' - C++
Использую math.h При компиляции выдает : cmath(21) : error C2039: 'acosf' : is not a member of '`global namespace'' 1&gt;D:\Microsoft...

непонятная ошибка - C++
Начал изучать с++. Все шло хорошо, но потом я столкнулся с проблемой, использовал bass.lib и bass.h. при компиляции выходит такая...

Непонятная ошибка - C++
Программа должна заменять в строке все пары АВ на С, пишу в Visual Studio, после ввода строки открывается вкладка output.c и показывает...

Непонятная ошибка - C++
Прошу помочь. Нижеприведенный фрагмент кода работает, генерирует ключ, варнингов нет. В дебаге все работает отлично, в релизе выдает ошибку...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.05.2014, 17:50 #2
Цитата Сообщение от GLS Посмотреть сообщение
то всё нормально работает.
скорее всего это случайность и ошибка таки есть в реализации этих функций или ещё где
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 17:53  [ТС] #3
Jupiter, в реализации функций ничего не меняется, почему то напрямую работает, а через инклуд нет
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
05.05.2014, 18:02 #4
если падает при запуске - надо выяснить причину падения. Нужно пройти программу пошагово, применять точки-останова, выводить в лог сообщения обо всех исключительных ситуациях - так и выяснишь, что вызывает падение.
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
05.05.2014, 18:17 #5
GLS, точно компилируется? Тут глобальная переменная в заголовочном файле, которая попадает в два объектных файла - должен сругнуться линковщик.
GLS
2 / 2 / 1
Регистрация: 10.02.2014
Сообщений: 34
05.05.2014, 18:21  [ТС] #6
0x10, судя по тому что показывает дебагер, так и есть, пишет что Helper::textures multiple definition. Как правильно исправить?
0x10
2460 / 1632 / 238
Регистрация: 24.11.2012
Сообщений: 4,015
05.05.2014, 18:28 #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от GLS Посмотреть сообщение
Как правильно исправить?
1. Не использовать глобальные переменные.

Не по теме:

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


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

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

непонятная ошибка( - C++
// 1.cpp : main project file. #include &quot;stdafx.h&quot; #include &lt;cstdio&gt; // бібліотека введення-виводу #include &lt;cstring&gt; //...

Непонятная ошибка - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class CMessage { private: char *Text; char...

Непонятная ошибка - C++
Вообщем имеется такой код: // главная программа aka programm.cpp #include &quot;Sales_item.h&quot; using namespace std; ...

Непонятная ошибка - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #include &lt;locale.h&gt; int i; int fact (int n){ if ( n&lt;1 )...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
05.05.2014, 19:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru