VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 900|回复: 8

类模板问题

[复制链接]

3

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
发表于 2020-3-17 15:00:01 | 显示全部楼层 |阅读模式
template<class Type>
class Bar
{
   template<class T> friend void Foo1(const T&);
};

请问 Foo1该如何在模板类Bar外面 定义?

我自己是这么写的
template<class T> void Foo1(const T&){}

但编译时 报错 说 error C2668: “Foo1” : 对重载函数的调用不明确
可能是模板类里声明的那个,也可能是外面定义的那个

该怎么办?
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-6-20 09:15:01 | 显示全部楼层
template<class T>
void Bar<T>::Foo1(const T&)
{}
回复

使用道具 举报

3

主题

10

帖子

10.00

积分

新手上路

Rank: 1

积分
10.00
 楼主| 发表于 2020-6-20 18:00:01 | 显示全部楼层
2楼的 是不是看错了?

Foo1又不是成员函数
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-6-21 23:00:01 | 显示全部楼层
template<class T>
class Bar
{
   template<class T2>
   friend void Foo1(const T2&);
};

template <class T2>
void Foo1(const T2&)
{}

//看member template吧
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-6-22 08:45:01 | 显示全部楼层
看錯了,我這個能編譯過去
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-6-22 20:00:02 | 显示全部楼层
#include <iostream>

template<class T>
class Bar
{
public:
   Bar(T b) : b_(b) {}
   
   template<class T2>
   friend void Foo1(const T2&);
private:
        T b_;
};

template <class T2>
void Foo1(const T2& t)
{
        std::cout << t.b_ << std::endl;       
}

int main()
{
        Bar<int> b(5);
       
        Foo1(b);
       
        return 0;
}
回复

使用道具 举报

3

主题

9

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-6-24 17:00:01 | 显示全部楼层
楼上那个程序在vc里面编译不过去呀!有两个错误???......
error C2668: 'Foo1' : ambiguous call to overloaded function
回复

使用道具 举报

0

主题

63

帖子

43.00

积分

新手上路

Rank: 1

积分
43.00
发表于 2020-6-28 08:45:01 | 显示全部楼层
我用的MinGW
回复

使用道具 举报

0

主题

1

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-7-16 23:30:01 | 显示全部楼层
可以编译通过阿
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表