标题:关于嵌套从属类型名称的问题?
只看楼主
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
 问题点数:0 回复次数:13 
关于嵌套从属类型名称的问题?
例子:
template<typename C>
void f(const C& container,      //为什么这句不加typename 怎么来判断嵌套从属类型名称?
       typename C::iterator iter);
搜索更多相关主题的帖子: 类型名称 嵌套 typename container void 
2008-04-30 11:46
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
container 就是c类型引用..后面的迭迨器才是嵌套

学习需要安静。。海盗要重新来过。。
2008-04-30 12:55
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
得分:0 
谢谢了
能否再举个例子 说一下 什么样的才算嵌套
2008-04-30 13:27
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
#include<iostream>
using namespace std;
class a
{
public:
    class b
    {
    public:
        int i;
        int j;
        b(int i1=0,int j1=0):i(i1),j(j1)
        {

        }
        void demo()
        {
            cout<<i<<"  "<<j<<endl;
        }
    };
        int i;
        int j;
        a(int i1=1,int j1=1):i(i1),j(j1)
        {

        }
        void demo()
        {
            cout<<i<<"  "<<j<<endl;
        }
};
int main()
{
    a a1;
    a::b b1;
    a1.demo();
    b1.demo();
    return 0;
}

学习需要安静。。海盗要重新来过。。
2008-04-30 13:38
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
对了你尝试过去掉typename吗?

学习需要安静。。海盗要重新来过。。
2008-04-30 13:48
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
得分:0 
没有 看书上说 去掉的话 编译器就不知道 C::iterator是类型了
谢谢举的嵌套例子
不过 我想问在类模板中什么时候加typename啊
好象是说 是跟template<typename C>中C有关系的
2008-04-30 14:01
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
你把书上完整的例子弄来看看好啊...一起研究..

学习需要安静。。海盗要重新来过。。
2008-04-30 14:05
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
#include<iostream>
using namespace std;
class a
{
public:
    class iterator
    {
    public:
        int i;
        int j;
        iterator(int i1=0,int j1=0):i(i1),j(j1)
        {

        }
        void demo()
        {
            cout<<i<<"  "<<j<<endl;
        }
    };
        int i;
        int j;
        a(int i1=1,int j1=1):i(i1),j(j1)
        {

        }
        void demo()
        {
            cout<<i<<"  "<<j<<endl;
        }
      
};
template <typename C>
class b
{
public:
    
  void f(const C& container,typename C::iterator iter){};
};

int main()
{
    a a1;
    a::iterator iter;
    b<a> b1;
    b1.f(a1,iter);
    return 0;
}

学习需要安静。。海盗要重新来过。。
2008-04-30 14:20
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
我的好像要不要都没错的..你看看呢
#include<iostream>
using namespace std;
class a
{
public:
    class iterator
    {
    public:
        int i;
        int j;
        iterator(int i1=0,int j1=0):i(i1),j(j1)
        {

        }
        void demo()
        {
            cout<<i<<"  "<<j<<endl;
        }
    };
        int i;
        int j;
        a(int i1=1,int j1=1):i(i1),j(j1)
        {

        }
        void demo()
        {
            cout<<i<<"  "<<j<<endl;
        }
      
};
template <typename C>
class b
{
public:
    
  void f(const C& container, C::iterator iter)
  {
      cout<<container.i<<endl;
      cout<<iter.i<<endl;
  };
};

int main()
{
    a a1;
    a::iterator iter;
    b<a> b1;
    b1.f(a1,iter);
    return 0;
}

[[it] 本帖最后由 sunkaidong 于 2008-4-30 14:24 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-04-30 14:21
newyj
Rank: 2
等 级:新手上路
威 望:3
帖 子:542
专家分:0
注 册:2008-1-4
得分:0 
辛苦了 真是感谢啊
我试了一下 去掉typename 后 编译器报错了
2008-04-30 16:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-211748-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.111625 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved