游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1892|回复: 7

问两个问题

[复制链接]

78

主题

194

帖子

194

积分

注册会员

Rank: 2

积分
194
发表于 2004-7-25 18:12:00 | 显示全部楼层 |阅读模式
先谢过了。
第一个是: 编译错误 “不能将参数 2 从“int”转换为“int &”   不是对“const”的引用不能绑定到非 lvalue“是什么意思
第二个是: 一个模板函数,如何申明为一个类的友元。
再谢一次。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2004-7-26 08:51:00 | 显示全部楼层

Re:问两个问题

第一题:信息不明确;
第二题:三种情况:
void fun(T a)
{
        a+=1;
}

class A
{
        friend void fun(int a);//将其特化
};

第二种情况:
void fun(T a)
{
        a+=1;
}

class A
{
        template<class T>
        friend void fun(T a);//使用时特化
};

第三种情况:
void fun(T a)
{
        a+=1;
}

template<class T>
class A
{
        friend void fun(T a);//特化A时特化
};

不知道你的用途是什么


78

主题

194

帖子

194

积分

注册会员

Rank: 2

积分
194
 楼主| 发表于 2004-7-26 09:27:00 | 显示全部楼层

Re: Re:问两个问题

是这样子的.
一个模板函数
template<typename T>
  void GetFrom(T& obj);
template<>
  void GetFrom(A& obj);
class A
{
   要将GetFrom(A& obj)申明为友元
}

还有第一个问题也是在里边出现的
已经有int的偏特函数,然后
譬如在A的偏特函数中调用就出现那个错误
template<>
  void GetFrom(A& obj)
{
   GetFrom(5)   <- ERR
   GetFrom(A.IntValue) <-ERR
}

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2004-7-26 10:16:00 | 显示全部楼层

Re:问两个问题

i#include <tchar.h>
#include <malloc.h>
#include <stdio.h>
#include <conio.h>
#include <iostream>
template <class T>
void fun(T a)
{
        std::cout<<a;
}

class A
{
        friend void fun(A a);
};

void fun(A a)//重载
{
        fun(5);
}






//return int *

//main
int _tmain(int argc, _TCHAR* argv[])
{
        A a;
        fun(a);
}

生成日志      ------- 已启动生成: 项目: test,配置: Debug|Win32 -------

命令行      正在创建临时文件“g:\test\Debug\RSP000012.rsp”,其内容为
[
/Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Gm /EHsc /RTC1 /MLd /Fo"Debug/" /Fd"Debug/vc70.pdb" /W3 /c /Wp64 /ZI /TP
.\Test.cpp
]
正在创建命令行“cl.exe @g:\test\Debug\RSP000012.rsp /nologo”
正在创建临时文件“g:\test\Debug\RSP000013.rsp”,其内容为
[
/OUT:"Debug/test.exe" /INCREMENTAL /NOLOGO /DEBUG /PDB:"Debug/test.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
.\Debug\stdafx.obj
.\Debug\Test.obj
]
正在创建命令行“link.exe @g:\test\Debug\RSP000013.rsp”
输出窗口      正在编译...
Test.cpp
正在链接...
结果      生成日志保存在“file://g:\test\Debug\BuildLog.htm”中
test - 0 错误,0 警告

78

主题

194

帖子

194

积分

注册会员

Rank: 2

积分
194
 楼主| 发表于 2004-7-26 11:39:00 | 显示全部楼层

Re:问两个问题

我重新开了个工程,也是了一下,没有错误。开来这种方式是正确的了,但奇怪的是在原来那个工程中就是不可以,唯一的不同之处是类和函数不在一个namespace中,但这也不是导致问题的原因,所以还是无法理解,为什么正确申明为友元后却不认。
我只好改了改方式,原来PutInto 和 GetFrom都在Serialize名字空间中,现在把Serialize改为一个类,魔板函数都是静态函数,在把类设为友元,问题就解决了。Lucky!
另外原来的第一个问题,好像只要类型完全匹配就可以了,如果通过强制类型转换就发生那个莫名其妙的错误,模板怎么那么麻烦!!

78

主题

194

帖子

194

积分

注册会员

Rank: 2

积分
194
 楼主| 发表于 2004-7-26 11:40:00 | 显示全部楼层

Re:问两个问题

非常感谢你的帮助!一鞠躬

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2004-7-26 12:55:00 | 显示全部楼层

Re:问两个问题

你在写序列化的模板类啊?
模板只能匹配,不能强制转换的。

121

主题

2029

帖子

2034

积分

金牌会员

Rank: 6Rank: 6

积分
2034
QQ
发表于 2004-7-26 12:58:00 | 显示全部楼层

Re:问两个问题

ps:VC的不完全特化毛病多多。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-4 05:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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