как объявить глобаль переменную и IntelliSense работал
От: bookevg  
Дата: 26.07.05 07:36
Оценка:
Есть несколько файлов:
------------------------------------------------------------------
var.h
namespace nmBr
{
class CBreaker // объявление класса
{
...
Set_Sts(char Addr);
};
extern СBreaker Q;
}
------------------------------------------------------------------
var.c
using namespace nmBr;
#include "var.h"
// реализация класса
CBreaker::Set_Sts(char Addr)
{
...
}
// определение класса
CBreaker nmBr::Q;
------------------------------------------------------------------
user1.c
#include "var.h"
void func1 () {
nmBr::Q.Set_Sts(100); // не работает IntelliSense
}
------------------------------------------------------------------
user2.c
#include "var.h"
void func2 () {
nmBr::Q.Set_Sts(150); // не работает IntelliSense
}
------------------------------------------------------------------
Как сделать, чтоб IntelliSense работал в Visual Studio Net 2003
или есть ли другой механизм объявления глобальной переменной из пространсва имен
Ведь в самом в Visual Studio Net 2003 при использовании объектов std::cin или std::cout IntelliSense работает
Re: как объявить глобаль переменную и IntelliSense работал
От: _Dreamer Россия  
Дата: 26.07.05 08:52
Оценка:
Здравствуйте, bookevg, Вы писали:

B>Как сделать, чтоб IntelliSense работал в Visual Studio Net 2003

B>или есть ли другой механизм объявления глобальной переменной из пространсва имен
B>Ведь в самом в Visual Studio Net 2003 при использовании объектов std::cin или std::cout IntelliSense работает

Если интересует просто удобные подсказки и выделение слов — поставьте Visual Assist. Он все показывает. И вообще покруче будет встроенного IntelliSense
Re[2]: как объявить глобаль переменную и IntelliSense работа
От: bookevg  
Дата: 26.07.05 10:20
Оценка:
Здравствуйте, _Dreamer, Вы писали:

_D>Здравствуйте, bookevg, Вы писали:


B>>Как сделать, чтоб IntelliSense работал в Visual Studio Net 2003

B>>или есть ли другой механизм объявления глобальной переменной из пространсва имен
B>>Ведь в самом в Visual Studio Net 2003 при использовании объектов std::cin или std::cout IntelliSense работает

_D>Если интересует просто удобные подсказки и выделение слов — поставьте Visual Assist. Он все показывает. И вообще покруче будет встроенного IntelliSense


Поставил, но не помогло (работает, если обращаться как nmBr.Q.Set_Sts(100) — но данный код не компилиться, т.к. надо nmBr::Q.Set_Sts(100)). Может кто знает, как сделать глобальный экземпляр класса из пространства имен, чтоб к нему можно было обращаться как к объектам std::cin и std::cout и при этом была возможность быстрой подсказки. Вот бы узнать как Microsoft это удалось сделать.
Re[3]: как объявить глобаль переменную и IntelliSense работа
От: bookevg  
Дата: 26.07.05 10:50
Оценка:
Большое спасибо за ответ. Проблему решил следующим образом:

Есть несколько файлов:
------------------------------------------------------------------
var.h
namespace nmBreaker
{
class CBreaker // объявление класса
{
...
Set_Sts(char Addr);
};
}
namespace nmBr
{
extern nmBreaker::СBreaker Q;
}

------------------------------------------------------------------
var.c
using namespace nmBreaker;
#include "var.h"
// реализация класса
CBreaker::Set_Sts(char Addr)
{
...
}
// определение класса
CBreaker nmBr::Q;
------------------------------------------------------------------
user1.c
#include "var.h"
void func1 () {
nmBr::Q.Set_Sts(100); // не работает IntelliSense
}
------------------------------------------------------------------
user2.c
#include "var.h"
void func2 () {
nmBr::Q.Set_Sts(150); // не работает IntelliSense
}
Re: как объявить глобаль переменную и IntelliSense работал
От: gbt Россия  
Дата: 26.07.05 10:57
Оценка:
Hello, bookevg, you wrote:

> ------------------------------------------------------------------
> var.h 
> namespace nmBr
> {
>       class CBreaker    // объявление класса
>       {
>         ...
>         Set_Sts(char Addr);
>       };
>       extern СBreaker Q;
> }
> ------------------------------------------------------------------
> var.c
> //using namespace nmBr; это убираем
> #include "var.h"
  namespace nmBr { // Здесь добавляем
> // реализация класса
> CBreaker::Set_Sts(char Addr)
> {
>     ...
> }
> // определение класса
> CBreaker Q; // Здесь подправляем
 } // Здесь добавляем
> ------------------------------------------------------------------
> user1.c 
> #include "var.h"
> void func1 () {
>   nmBr::Q.Set_Sts(100);  // не работает IntelliSense
> }
> ------------------------------------------------------------------
> user2.c 
> #include "var.h"
> void func2 () {
>   nmBr::Q.Set_Sts(150);  // не работает IntelliSense
> }
> ------------------------------------------------------------------

Только после того как я заменил using на namespace scope, у меня заработал
VisualAssist, как вы хотели, т.е. когда наберешь nmBr:: он показывает CBeaker и
Q.

Обычно реализацию классов и т.п. опрееленных в пространствах имен определяют
тоже обернутой в эти пространства, а не using namespace... ИМХО.

P.S. По-моему, пришлось скомпилить код для того, чтобы VisualAssist заработал,
до этого он не хотел...

--
Igor Polyakov — igorpol_gbt (at) mail (dot) ru
Posted via RSDN NNTP Server 1.9
Re[2]: как объявить глобаль переменную и IntelliSense работа
От: bookevg  
Дата: 26.07.05 11:52
Оценка:
Здравствуйте, gbt, Вы писали:

Спасибо, ваш способ лучше моего
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.