我有以下模式:
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
具有相同的价值。
我的问题:
d
与b
相同?感谢。
答案 0 :(得分:5)
以下代码为我编译(应该如此)。
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;
}
请注意,在您的代码中:
operator *
无法从课外访问,因为它是私有的。请发布实际代码并指明错误行。