C++ 叠瓦C++;模板
我有以下模式:C++ 叠瓦C++;模板,c++,templates,C++,Templates,我有以下模式: 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>
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;
}
模板
类MyClass
{
公众:
模板
MyClass运算符*(MyClass常量和其他)常量;
};
// ../..
模板
MyClass MyClass::运算符*(MyClass常量和其他)常量//<此处出错
{
我的班级成绩;
//…做事。。
返回结果;
}
它没有编译,错误消息是
错误C2975。错误C2975:“dom”:MyClass的参数模板无效
如果我用template
替换template
并相应地使用它,它就可以正常工作。但是我希望d
与b
的值相同
我的问题是:
d
与b
相同谢谢。以下代码对我来说很好(应该是这样的)
模板
结构MyClass
{
模板
MyClass运算符*(MyClass常量和其他)常量;
};
模板
MyClass MyClass::运算符*(MyClass常量和其他)常量
{
我的班级成绩;
返回结果;
}
int main()
{
我的a级;
MyClass b;
a*b;
}
请注意,在代码中:
操作符*
不能从类外部访问,因为它是私有的请张贴真实代码并指出错误所在的行。几乎+1表示“叠瓦”。这是C++模板中常用的短语吗?你能显示实例化模板的代码吗?听起来您可能试图使用变量作为参数(例如,
int number=stuff();MyClass thing;
),而数值模板参数必须是编译时常量。@Thilo:我真的不知道,它错了吗@迈克:我完全同意,但问题是我还没有把它说出来。嗯。。。一个在其声明中包含2个整数的模板和一个乘法函数,该函数返回一个实例,该实例从LHS获取第一个模板参数,从RHS获取第二个模板参数,我将假设这是一个矩阵类:幸运的是,可见性和可访问性之间存在着完全不同。符号根据可见性进行解析(即它们是否存在于此范围或任何父范围内,以及覆盖规则等),然后检查可访问性…我进行了一些编辑,以使代码更准确。谢谢你给我推荐信的提示。您的示例已编译,但我的示例仍然没有编译,除非我在类(!)中定义了方法体。顺便问一下,使用struct
关键字而不是class
的原因是什么?struct
的默认访问模式是public
,因此在示例中可以节省空间;)除了/..do stuff..
部分之外,此代码现在与您的代码相同。也许错误就在那里?(使用struct
将成员公开,但除此之外,与class
完全相同)。
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;
}