24小时热门版块排行榜    

查看: 934  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] fileCode有新解读? +7 Tide man 2026-08-08 13/650 2026-08-08 09:47 by zhengxianzb
[硕博家园] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 HEQlVqMTIA7d 2026-08-07 5/250 2026-08-08 08:59 by 6vVgjDL4CnGu
[基金申请] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +3 KXLV3nuBVBY7 2026-08-07 4/200 2026-08-08 08:21 by 6vVgjDL4CnGu
[考博] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 HEQlVqMTIA7d 2026-08-07 3/150 2026-08-08 03:47 by 6vVgjDL4CnGu
[基金申请] 基金中了 +14 laoda193707 2026-08-06 14/700 2026-08-08 00:23 by 实验小白ha
[基金申请] 关于filecode +4 布布和一二 2026-08-07 7/350 2026-08-07 22:55 by zhanghaozhu
[基金申请] 娱乐 +6 Tide man 2026-08-03 6/300 2026-08-07 22:40 by 铁帽子农民
[基金申请] 化学口download_prp&amp;fileCode的固定段好像这几天一直没变,有变的大神么? +3 Tide man 2026-08-07 4/200 2026-08-07 22:39 by Tide man
[基金申请] 关于代码变化问题,想知道的进来 +9 且听虎啸 2026-08-07 12/600 2026-08-07 21:53 by 理想三旬2025
[基金申请] 固定端突然变了,今天 +6 archvillain 2026-08-06 10/500 2026-08-07 16:03 by 医学老男孩
[基金申请] 听说今天filecode变了 +24 布布和一二 2026-08-06 47/2350 2026-08-07 16:02 by zhiyanjiang
[基金申请] filecode与中标关系的预测 +3 布布和一二 2026-08-07 3/150 2026-08-07 15:09 by gltch
[基金申请] 关于豆爷回答的JTJC与%2F数量 +4 yang182083 2026-08-06 6/300 2026-08-07 12:43 by 虫友是什么虫
[基金申请] filecode +14 等待解的谜 2026-08-06 19/950 2026-08-07 12:20 by wlwhappy
[基金申请] filecode +8 布布和一二 2026-08-06 11/550 2026-08-06 20:41 by tangpu318
[基金申请] 影响面上的因素 +8 布布和一二 2026-08-05 11/550 2026-08-06 10:41 by 宝贝虫子
[基金申请] 有没有H口的?有收到消息的吗? +3 超级海虾 2026-08-04 3/150 2026-08-04 17:26 by 学教育滴
[基金申请] 纯娱乐,不喜欢勿喷 +7 Tide man 2026-08-04 10/500 2026-08-04 15:10 by loufangrui
[基金申请] 面上提前没消息,有中的吗 +14 archvillain 2026-08-02 18/900 2026-08-04 14:42 by archvillain
[基金申请] 什么时候能放榜呀? +3 Jacob678 2026-08-03 3/150 2026-08-03 16:14 by gltch
信息提示
请填处理意见