Пропущенный шаблон C ++ - PullRequest
3 голосов
/ 23 марта 2010

У меня есть следующий шаблон:

template <int a, int b>
class MyClass
{
public:
  template <int c>
  MyClass<a, c> operator*(MyClass<b, c> const &other) const;
};

// ../..

template <int a, int b> template <int c>
MyClass<a, c> MyClass<a, b>::operator*(MyClass<b, c> const &other) const //< error here
{
  MyClass<a, c> result;
  // ..do stuff..
  return result;
}

Не компилируется, сообщение об ошибке

Ошибка C2975. ошибка C2975: 'dom': неверный шаблон аргумента для 'MyClass'

Если я заменю template <int c> на template <int c, int d> и использую его по назначению, он работает нормально. Но я хочу, чтобы d было таким же значением, как b.

Мои вопросы:

  1. Почему пример не работает?
  2. Как заставить d быть таким же, как b?

Спасибо.

1 Ответ

5 голосов
/ 23 марта 2010

Следующий код компилируется для меня нормально (как и должно быть).

template <int a, int b>
struct MyClass
{
    template <int c>
    MyClass<a, c> operator*(MyClass<c, b> const &other) const;
};

template <int a, int b> template <int c>
MyClass<a, c> MyClass<a, b>::operator*(MyClass<c, b> const &other) const
{
    MyClass<a, c> result;
    return result;
}

int main()
{
    MyClass<1, 2> a;
    MyClass<3, 2> b;
    a * b;
}

Обратите внимание, что в вашем коде:

  1. Вы возвращаете ссылку на временный.
  2. operator * недоступен извне класса, потому что он приватный.

Пожалуйста, напишите реальный код и укажите строку с ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...