Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: extern в пространстве имен  (Прочитано 8950 раз)
0 Пользователей и 4 Гостей смотрят эту тему.
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« : 09-10-2005 19:50 » new

В файле Lab.cpp объявляю и инициализируб глобальную переменную TCHAR szLab4[200];
В файле Lab4.h делаю так:
Код:
#include "cmath"
#include "vector"
namespace lab4
{
...
extern TCHAR szLab4[200];
DrawText(hdc, szLab4, strlen(szLab4), &rt, DT_BOTTOM | DT_CENTER);//Ошибка тут, текс ошибки ниже
...
}

Вот текст ошибки:
Цитата
lab1.obj : error LNK2001: unresolved external symbol "char * lab4::szLab4" (?szLab4@lab4@@3PADA)
Release/lab1.exe : fatal error LNK1120: 1 unresolved externals
Интересно, что если убрать namespace lab4 (т.е. не использовать пространства имен в файле lab4.h), то все в порядке.
Я нигде не читал о таком ограничении. Как же его перебороть в этом случае?

Записан

ещё один вопрос ...
Anchorite
Гость
« Ответ #1 : 10-10-2005 02:21 » 

Где-то в другом модуле написать:

Код:
namespace lab4
{
    TCHAR szLab4[200];
}
Записан
Hooter
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 10-10-2005 06:49 » 

nikedeforest, тебе нужно использовать szLab4 вглобальной области или в пространстве имен lab4?

Если объявить переменную в глобальной области и переменную с таким же именем в пространстве имен, то это будут две разные переменные.
Именно это ты и делаешь:
В файле Lab.cpp объявляю и инициализируб глобальную переменную TCHAR szLab4[200];
В файле Lab4.h делаю так:
Код:
#include "cmath"
#include "vector"
namespace lab4
{
...
extern TCHAR szLab4[200];
...
}

А ошибка у тебя возникает потому, что extern подразумевает объявление переменной в пространстве имен (как написал Anchorite), а такого объявления у тебя и нет.

Поэтому тебе нужно в файле Lab.cpp объявить переменную не в лобальной области, а так, как написал Anchorite.
Либо в файле Lab4.h вынести extern szLab4... в глобальную область.
Код:
#include "cmath"
#include "vector"

extern TCHAR szLab4[200];

namespace lab4
{
...
}
Записан
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 10-10-2005 11:52 » 

Anchorite, Hooter, спасибо! 
Записан

ещё один вопрос ...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines