путает имя типа с именем ф-ии класса ?
От: overt Ниоткуда  
Дата: 24.02.08 09:51
Оценка: :)
Но почему?
Или я неправильно понял суть проблемы?

(MSVS7.1/9.0)
class Log {};

class UseLog
{
private:
    void Log() {} // проблема исчезает, если назвать ф-ию по-другому

public:
    struct stArgs {Log*    p_log;};
    Log*    m_pLog;
    UseLog(stArgs& args):m_pLog(args.p_log){}
};
(MS VS 7.1/8.0)
Re: путает имя типа с именем ф-ии класса ?
От: Uzumaki Naruto Ниоткуда  
Дата: 24.02.08 10:07
Оценка: -2
Вас венгерской нотации никто не учил?

Re: путает имя типа с именем ф-ии класса ?
От: Аноним  
Дата: 24.02.08 10:26
Оценка: 1 (1) +1
Здравствуйте, overt, Вы писали:

O>Или я неправильно понял суть проблемы?

[]

За пределами UseLog у Вас объявлен класс Log, а внутри — функция с тем же именем.
Следовательно, нужно явно указать, что класс Log находится в глобальной области видимости:

class Log {};

class UseLog
{
private:
    void Log() {}

public:
    struct stArgs {::Log*    p_log;};      // "::Log"
    ::Log*    m_pLog;                   // "::Log"
    UseLog(stArgs& args):m_pLog(args.p_log){}
};
Re[2]: путает имя типа с именем ф-ии класса ?
От: overt Ниоткуда  
Дата: 24.02.08 10:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Следовательно, нужно явно указать, что класс Log находится в глобальной области видимости:


спасибо
(MS VS 7.1/8.0)
Re[2]: путает имя типа с именем ф-ии класса ?
От: Zigmar Израиль  
Дата: 24.02.08 11:48
Оценка: +2
Здравствуйте, Uzumaki Naruto, Вы писали:

UN>Вас венгерской нотации никто не учил?

Судя по коду, бог миловал
"To protect people you must slay people. To let people live you must let people die. This is the true teaching of the sword."
-Seijuro Hiko, "Rurouni Kensin"
Re[3]: путает имя типа с именем ф-ии класса ?
От: . Великобритания  
Дата: 24.02.08 12:20
Оценка: +1
overt wrote:

> А>Следовательно, нужно явно указать, что класс Log находится в

> глобальной области видимости:
> спасибо
А лучше называть функции и переменные с маленькой буквы, а классы, типы — с большой. Такой ситуации не возникнет.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[2]: путает имя типа с именем ф-ии класса ?
От: Аноним  
Дата: 25.02.08 10:21
Оценка:
Здравствуйте, Аноним, Вы писали:

А>За пределами UseLog у Вас объявлен класс Log, а внутри — функция с тем же именем.

А>Следовательно, нужно явно указать, что класс Log находится в глобальной области видимости:

Вопрос, что будет когда класс внесут в namespace? Заявлять "этого не случится никогда" я бы не стал — уж слишком часто практика убеждала в обратном
Re[3]: путает имя типа с именем ф-ии класса ?
От: Аноним  
Дата: 25.02.08 20:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вопрос, что будет когда класс внесут в namespace?


Можно так:

namespace logging {
  class Log {};

  class UseLog
  {
  private:
      void Log() {}

  public:
      struct stArgs {class Log*    p_log;}; // "class"
      class Log*    m_pLog;                 // "class"
      UseLog(stArgs& args):m_pLog(args.p_log){}
  };
}


Можно вот так, но лично я предпочёл бы способ, указанный выше:

namespace logging {
  class Log {};

  class UseLog
  {
  private:
      void Log() {}

  public:
      struct stArgs {logging::Log*    p_log;}; //"logging::"
      logging::Log*    m_pLog;                 //"logging::"
      UseLog(stArgs& args):m_pLog(args.p_log){}
  };
}


И как третий вариант — использование другого стиля написания кода (уже предлагалось в сообщениях выше).

A>Заявлять "этого не случится никогда" я бы не стал — уж слишком часто практика убеждала в обратном

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