模版类出问题,求解决

stackoverlow 2011-09-03 04:12:58

major_book tree;
LIB<Data> handler(tree);
handler->kind();
//这样写能通过没有问题
LIB<Data> handler(major_book());
handler->kind();
//这样写就报错
: error C2227: left of '->kind' must point to class/struct/union/generic type

临时对象应该是这样写能传的啊,上面这是什么原因,不能这样传临时对象么,不解啊,实在想不通
...全文
107 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
2011-09-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ri_aje 的回复:]
C/C++ code

LIB<Data> handler(major_book());
handler->kind();


这个是函数声明。声明了一个名字叫 handler,返回类型为 LIB<Data>,只接受一个参数的函数,该参数的类型也是一个函数,返回 major_book,不接受任何参数。下面这句应该是你想要的
C/C++ code

LIB<Data> handler((m……
[/Quote]
+1
ri_aje 2011-09-04
  • 打赏
  • 举报
回复

LIB<Data> handler(major_book());
handler->kind();

这个是函数声明。声明了一个名字叫 handler,返回类型为 LIB<Data>,只接受一个参数的函数,该参数的类型也是一个函数,返回 major_book,不接受任何参数。下面这句应该是你想要的

LIB<Data> handler((major_book()));
handler->kind();
QQIANQQ 2011-09-03
  • 打赏
  • 举报
回复

major_book tree;
LIB<Data> handler(tree);
handler->kind();
//这样写能通过没有问题
LIB<Data> handler(major_book());//看一下这一句的反汇编,我感觉是不是编译器理解为函数声明了!根本就没有构造handler这个对象

handler->kind();
//这样写就报错
: error C2227: left of '->kind' must point to class/struct/union/generic type


stackoverlow 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jackyjkchen 的回复:]
引用 9 楼 xuqiqw 的回复:

引用 4 楼 jackyjkchen 的回复:
引用 2 楼 xuqiqw 的回复:

引用 1 楼 jackyjkchen 的回复:
都是第一种用法,所以从没在意过第二种,记得听谁说过要转换什么的,也不确定,记不清了

尽量写自己看得懂的代码

因为LIB是个句柄类用了克隆函数的,用临时对象好点,不是临时的话就多复制了个对象
但是这个……
[/Quote]
发现问题原因了,我在构造函数随便加个形参第2种就行,貌似没有形参编译器确定不了是调用函数还是什么
就跟A a;和A a();样的。。。
所以,我想不要形参而是显示调用默认构造函数创建对象该怎么做?。。
stackoverlow 2011-09-03
  • 打赏
  • 举报
回复
warning C4930: 'LIB<T> handler(major_book (__cdecl *)(void))': prototyped function not called (was a variable definition intended?)
把第2种方法的第2句去掉,报了这个警告
各位看看对问题有什么帮助么
jackyjkchen 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xuqiqw 的回复:]

引用 4 楼 jackyjkchen 的回复:
引用 2 楼 xuqiqw 的回复:

引用 1 楼 jackyjkchen 的回复:
都是第一种用法,所以从没在意过第二种,记得听谁说过要转换什么的,也不确定,记不清了

尽量写自己看得懂的代码

因为LIB是个句柄类用了克隆函数的,用临时对象好点,不是临时的话就多复制了个对象
但是这个。。第一个能行第二个就不行了实在不解啊
……
[/Quote]

模板都是编译期就确定好的,怎么会有运行期开销?

再说 major_book 也不是模板

我理解你不就是handler里面有一个对象拷贝么,把这个拷贝去掉,里头只保存指针
stackoverlow 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 limang89 的回复:]
记住只能按第一种写,写自己能看懂的代码。。
[/Quote]
第2种看得懂,而且能省空间。。而且容器什么的都能这样传临时对象,但这个就是不知道为什么不行
stackoverlow 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jackyjkchen 的回复:]
引用 2 楼 xuqiqw 的回复:

引用 1 楼 jackyjkchen 的回复:
都是第一种用法,所以从没在意过第二种,记得听谁说过要转换什么的,也不确定,记不清了

尽量写自己看得懂的代码

因为LIB是个句柄类用了克隆函数的,用临时对象好点,不是临时的话就多复制了个对象
但是这个。。第一个能行第二个就不行了实在不解啊


等高手……

实在搞不定的话,LIB<D……
[/Quote]
是个模版句柄,用了智能指针又用了克隆函数的。。
jackyjkchen 2011-09-03
  • 打赏
  • 举报
回复
C++的特点就在于灵活,有些东西不是一条路走死,一个特性不熟悉还有N多替代方案可以做。

我就会选择我看上去最清楚的哪一种……
limang89 2011-09-03
  • 打赏
  • 举报
回复
记住只能按第一种写,写自己能看懂的代码。。
jackyjkchen 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tujiaw 的回复:]

少了new吧
[/Quote]
new就是传指针啦,楼主的第一段代码看不是这个意思
stackoverlow 2011-09-03
  • 打赏
  • 举报
回复
顶上去。。求解决啊到底为什么
jackyjkchen 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xuqiqw 的回复:]

引用 1 楼 jackyjkchen 的回复:
都是第一种用法,所以从没在意过第二种,记得听谁说过要转换什么的,也不确定,记不清了

尽量写自己看得懂的代码

因为LIB是个句柄类用了克隆函数的,用临时对象好点,不是临时的话就多复制了个对象
但是这个。。第一个能行第二个就不行了实在不解啊
[/Quote]

等高手……

实在搞不定的话,LIB<Data> handler就不要克隆了

构造参数传个智能指针,性能上作用域上都和你的理想设计一样,也不需要自己释放
ningto.com 2011-09-03
  • 打赏
  • 举报
回复
少了new吧
stackoverlow 2011-09-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jackyjkchen 的回复:]
都是第一种用法,所以从没在意过第二种,记得听谁说过要转换什么的,也不确定,记不清了

尽量写自己看得懂的代码
[/Quote]
因为LIB是个句柄类用了克隆函数的,用临时对象好点,不是临时的话就多复制了个对象
但是这个。。第一个能行第二个就不行了实在不解啊
jackyjkchen 2011-09-03
  • 打赏
  • 举报
回复
都是第一种用法,所以从没在意过第二种,记得听谁说过要转换什么的,也不确定,记不清了

尽量写自己看得懂的代码

64,631

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧