Невозможно назначить член, который является указателем на шаблонизированный класс - PullRequest
1 голос
/ 21 декабря 2008

Моя проблема в том, что в моем классе "Widget" у меня есть следующее объявление:

MouseEvent* X;

В функции-члене я инициализирую указатель с помощью адреса обычным способом:

X = new MouseEvent;

Хорошо, эта последняя строка останавливает компилятор на:

ошибка C2166: l-значение указывает постоянный объект

Хорошо, MouseEvent объявлен как typedef для упрощения вещей:

typedef Event__2<void, Widget&, const MouseEventArgs&> MouseEvent;

И Event__2, как вы можете себе представить, выглядит так: (показана базовая структура):

template <typename return_type, typename arg1_T, typename arg2_T>
class Event__2
{
     ...
};

Я не знаю, где класс Event__2 получает квалификатор const. Любые советы?

Спасибо.

1 Ответ

3 голосов
/ 21 декабря 2008

Вероятно, функция-член, где вы инициализируете X, помечается как const - что-то вроде этого.

class Foo
{
   int *Bar;

public:

   void AssignAndDoStuff() const
   {
      Bar = new int; // Can't assign to a const object.
      // other code
   }
}

Решением здесь является либо

  1. Назначить Bar отдельным неконстантным методом,
  2. изменить AssignAndDoStuff на неконстантный или
  3. помечать Бар как mutable.

Выберите один из следующих вариантов:

class Foo
{
   mutable int *Bar; // 3

public:
   void Assign() // 1
   {
       Bar = new int; 
   }   
   void DoStuff() const
   {
       // Other code
   }

   void AssignAndDoStuff() // 2
   {
      Bar = new int; 
      // other code
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...