24小时热门版块排行榜    

Znn3bq.jpeg
查看: 838  |  回复: 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 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 327求调剂 +10 Xxjc1107. 2026-04-06 11/550 2026-04-09 01:21 by lature00
[考研] 086000调剂 +3 十七sa 2026-04-07 3/150 2026-04-08 23:58 by GouQ
[考研] 一志愿南京航空航天大学 材料与化工329分求调剂 +11 Mr. Z 2026-04-05 12/600 2026-04-08 16:15 by luoyongfeng
[考研] 362求调剂 +8 我要考大 2026-04-06 12/600 2026-04-08 00:32 by JourneyLucky
[考研] 304求调剂(085602,过四级,一志愿985) +25 化工人999 2026-04-04 26/1300 2026-04-07 22:06 by hemengdong
[考研] 325 调剂 +6 QQ小虾 2026-04-07 6/300 2026-04-07 15:17 by Ccclqqq
[考研] 080500求调剂 +12 黄宇博 2026-04-06 12/600 2026-04-07 12:41 by upczlm1989
[考研] 334分控制工程求调剂 +4 姜尚真sadasd 2026-04-03 4/200 2026-04-07 09:26 by 蓝云思雨
[考研] 081200-11408-276学硕求调剂 +5 崔wj 2026-04-05 5/250 2026-04-06 15:40 by lin-da
[考研] 生物学求调剂 +5 15064154688 2026-04-03 5/250 2026-04-06 11:56 by lijunpoly
[考研] 求调剂 +5 wos666 2026-04-03 5/250 2026-04-06 10:13 by 蓝云思雨
[考研] 308求调剂 +3 终不似从前 2026-04-05 3/150 2026-04-05 22:23 by hemengdong
[考研] 262求调剂 +7 天下第一文 2026-04-04 8/400 2026-04-05 21:31 by 激流勇渡
[考研] 321求调剂 +13 认真求上学 2026-04-02 13/650 2026-04-04 18:23 by macy2011
[考研] 322求调剂 +6 FZAC123 2026-04-03 6/300 2026-04-03 22:23 by 科研小专家
[考研] 本科985,专业0812分336求调剂 +4 莫莫很行 2026-04-03 4/200 2026-04-03 21:31 by zhq0425
[考研] 294求调剂 +6 Grey_Ey 2026-04-03 6/300 2026-04-03 20:46 by 欣喜777
[硕博家园] 求老师收留 +9 lllq123 2026-04-03 9/450 2026-04-03 13:48 by 呼吸都是减肥
[考研] 求材料调剂 一志愿南昌大学 328分 +5 yyy..... 2026-04-03 5/250 2026-04-03 13:46 by 百灵童888
[考研] 283求调剂 +3 jiouuu 2026-04-03 4/200 2026-04-03 13:28 by jiouuu
信息提示
请填处理意见