由于使用了模板化参数和继承的函数,我无法使用VS2015编译程序。
错误是this one。
我正在努力实现以下目标:
TableHeader
我确实理解该错误的含义,但我不理解为什么它实际上会发生。
我想class A
{
//do something
};
class B : public A
{
//do something
};
template <typename T>
class Foo {
template <typename T>
friend void function(Foo<T> & sm) {
//do something
}
};
void main()
{
Foo<A> test;
Foo<B> test2;
};
是用两个不同的签名创建的:
function
和
void function(Foo<A> & sm);
这是多定义的吗?
编辑-完整的错误消息:
void function(Foo<B> & sm);
答案 0 :(得分:2)
Clang和MS都有相同的投诉。删除第二个模板说明符,它将编译。
class A{};
class B : public A{};
template <typename T>
class Foo {
// template <typename T>
friend void function(Foo<T> & sm) {
}
};
int main()
{
Foo<A> test;
Foo<B> test2;
};
已经为类T
指定了 Foo
,因此涵盖了它的朋友功能。如果该功能有所不同,您将需要第二个template
,例如:
class A{};
class B : public A{};
template <typename T>
class Foo {
template <typename U>
friend void function(Foo<T> & sm, U another) {
}
};
int main()
{
Foo<A> test;
Foo<B> test2;
};