24小时热门版块排行榜    

Znn3bq.jpeg
查看: 837  |  回复: 5

lixy1217

木虫 (著名写手)

[求助] 求帮忙看一个关于模板友元函数的错误 已有1人参与

对于这样一个简单程序
#include<iostream>
using namespace std;

template < class T >
double func(T&a)
{
        return a.x;
}

class A
{
        private:  double x;
        public:  
                template < class T >
                friend double func(T&a);

                void solve()
                {
                        double s;
                        A a;
                        s=func<A>(a);   ////
                        cout<<s<<endl;
                }
};

void main()
{
        A a;
        a.solve();
}

结果显示了这样的错误:
e:\学习\cpp\测试\test.cpp(21) : error C2440: '=' : cannot convert from 'void' to 'double'
        Expressions of type void cannot be converted to other types

其中21行就是我标有 //// 的那一行。很纳闷,func的申明明明都是以double返回的,可为什么这里貌似却是void型

更加奇怪的是,class A中去掉对于func的友元定义,然后把double x放到public:里面,程序居然又对了,实在没搞懂原因,求高手解答。
回复此楼

» 猜你喜欢

偶尔敞开心扉,世界将不再孤独
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

木叶清风

木虫 (正式写手)

第一,x没有初始化;
第二,g++ 4.8.1肯定是能通过的(当然,int main (int argc, char* argv[]))
www.cvdelver.com
2楼2014-01-08 10:34:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lixy1217

木虫 (著名写手)

引用回帖:
2楼: Originally posted by 木叶清风 at 2014-01-08 10:34:09
第一,x没有初始化;
第二,g++ 4.8.1肯定是能通过的(当然,int main (int argc, char* argv[]))

初始化时次要问题,可以补充,我这里只是示范了一下遇到的问题,源程序不是这样的。
g++没用过,暂时不会linux~~不过的VS2008或者VS2010这个程序能通过吗?
偶尔敞开心扉,世界将不再孤独
3楼2014-01-08 11:49:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

【答案】应助回帖

★ ★ ★
感谢参与,应助指数 +1
lixy1217: 金币+3, 有帮助, 应该确实是转换类型的错误 2014-01-10 10:36:56
内容已删除
4楼2014-01-09 10:45:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

lixy1217

木虫 (著名写手)

引用回帖:
4楼: Originally posted by 锐利的碎片 at 2014-01-09 10:45:43
实际模板展开时编译器应该不能知道a.x的类型,vc不允许隐含转换,所以转换会出错。
可以在返回时加个static_cast<double>试下。
最好的办法是用c++11的decltype写成这样
template <typename T> auto ...

试过static_cast<double>,还是一样的错误

我的这个破机器连VS2010都安装不了,c++11就更不用想了
偶尔敞开心扉,世界将不再孤独
5楼2014-01-10 10:37:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

锐利的碎片

木虫 (正式写手)

star watcher

【答案】应助回帖

引用回帖:
5楼: Originally posted by lixy1217 at 2014-01-10 10:37:51
试过static_cast<double>,还是一样的错误

我的这个破机器连VS2010都安装不了,c++11就更不用想了...

gcc+codeblocks也可以试试。
6楼2014-01-10 20:23:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 lixy1217 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 086003调剂求助 +3 苏弋万 2026-04-09 3/150 2026-04-09 07:17 by Ecowxq666!
[考研] 调剂 +4 osbbx 2026-04-02 4/200 2026-04-08 22:52 by may_新宇
[考研] 工科 267求调剂 +6 wanwan00 2026-04-02 8/400 2026-04-08 22:09 by 朱云虎202
[考研] 0703调剂,一志愿天津大学319分 +23 haaaabcd 2026-04-05 26/1300 2026-04-08 16:19 by luoyongfeng
[考研] 388求调剂 +6 四川王涛 2026-04-07 8/400 2026-04-08 00:17 by JourneyLucky
[考研] 11408 325分 +3 jgtxuxgkx 2026-04-07 3/150 2026-04-07 23:10 by lbsjt
[考研] 338求调剂 +5 小猪红色 678 2026-04-06 6/300 2026-04-07 21:18 by 乔哒哒哒
[考研] 085602调剂 初试总分335 +10 19123253302 2026-04-05 10/500 2026-04-07 15:23 by 小乔同学ya
[考研] 081700化学工程与技术 一志愿中海洋 323 求调剂学校 +19 披星河 2026-04-03 19/950 2026-04-07 15:14 by 尽舜尧1
[考研] 292求调剂 +4 lilllllxccc 2026-04-05 5/250 2026-04-07 09:29 by 纺大杨老师
[考研] 287分求调剂 有专利国奖一志愿哈工大085406 +6 白易辰 2026-04-06 7/350 2026-04-06 22:46 by 875465
[考研] 341求调剂 +3 洛多罗 2026-04-02 4/200 2026-04-04 21:36 by 智能智慧
[考研] +5 雾与海 2026-04-02 6/300 2026-04-04 19:53 by 蓝云思雨
[考研] 材料383求调剂 +5 郭阳阳阳成 2026-04-04 5/250 2026-04-04 19:06 by dongzh2009
[考研] 278求调剂 +6 Yy7400 2026-04-03 6/300 2026-04-04 09:53 by zhangdingwa
[考研] 387求调剂 +4 爱吃片豆土 2026-04-03 5/250 2026-04-04 08:10 by 岸上的一条鱼
[考研] 材料科学与工程考研 +10 拯救皮特托先生 2026-04-02 10/500 2026-04-03 23:57 by userper
[考研] 350一志愿北京航空航天大学08500材料科学与工程求调剂 +5 kjnasfss 2026-04-03 5/250 2026-04-03 22:29 by 无际的草原
[考研] 303求调剂 +3 一色清羽 2026-04-02 4/200 2026-04-03 10:22 by 蓝云思雨
[考研] 283求调剂 +3 jiouuu 2026-04-02 4/200 2026-04-02 14:08 by 哒哒哒呱呱呱
信息提示
请填处理意见