为了账号安全,请及时绑定邮箱和手机立即绑定

用VS 2008 和 G++编译都出问题,都说D1,D2和B的作为func的形参不合法?为什么?

用VS 2008 和 G++编译都出问题,都说D1,D2和B的作为func的形参不合法?为什么?

C++
波斯汪 2022-05-11 10:09:23
STL源码解析中有这样的一段代码:------------------------------------------------------------------------------------#include <iostream>using std::cout;using std::endl;struct B {};struct D1:public B{};struct D2:public D1{};template <class I>func(I& p, B){ cout<< "B version "<<endl; }template <class I>func(I& p, D2){ cout<< "D2 version "<<endl; }template <class I>func(I& p, D1){ cout<< "D1 version "<<endl; }int main(){int *p;func(p, B());func(p, D1());func(p, D2());return 0;}可是用VS 2008 和 G++编译都出问题,都说D1,D2和B的作为func的形参不合法。报错:g++ 报错:testTag.cpp:11:13: 错误:ISO C++ 不允许声明无类型的‘func’testTag.cpp:15:14: 错误:ISO C++ 不允许声明无类型的‘func’testTag.cpp:19:14: 错误:ISO C++ 不允许声明无类型的‘func’VS 2008报错:1>d:\workspaces\vs 2008\projects\practicekaa\practicekaa\tagtest.h(22) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int--------------------------------------------------------------------------------------为什么不行呢?
查看完整描述

2 回答

?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

形参呀,d1 d2 b是类型,不是参数,要参数名
func(I& p, B xc)
func(I& p, D2 xc)
func(I& p, D1 xc)

查看完整回答
反对 回复 2022-05-16
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

ISO C++ 不允许声明无类型的‘func’, 注意: C++ 不支持默认 int.
提示很明显了, 你的函数模板把返回值漏掉了.

查看完整回答
反对 回复 2022-05-16
  • 2 回答
  • 0 关注
  • 125 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信