关于嵌套从属类型名称的问题?
例子:template<typename C>
void f(const C& container, //为什么这句不加typename 怎么来判断嵌套从属类型名称?
typename C::iterator iter); container 就是c类型引用..后面的迭迨器才是嵌套 谢谢了
能否再举个例子 说一下 什么样的才算嵌套 #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;
} 对了你尝试过去掉typename吗? 没有 看书上说 去掉的话 编译器就不知道 C::iterator是类型了
谢谢举的嵌套例子
不过 我想问在类模板中什么时候加typename啊
好象是说 是跟template<typename C>中C有关系的 你把书上完整的例子弄来看看好啊...一起研究.. #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;
} 我的好像要不要都没错的..你看看呢
#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]] 辛苦了 真是感谢啊
我试了一下 去掉typename 后 编译器报错了 我的没有报错...你用什么编译的9#的程序是没问题的 我用的是Dev-C++ 我用vc++6.0可以哦... 那我再 看看书上template 的讲解吧
谢谢了
页:
[1]
