大家帮看看这段代码有关问题出在哪儿啊

大家帮看看这段代码问题出在哪儿啊……
我C++菜鸟一个,实在搞不懂错误出在哪里……我用的是Code::Blocks+GCC……各位老大帮帮忙啊……谢谢了

#include   <iostream>
#include   <vector>

using   namespace   std;

template   <class   T>
struct   S1
{
        T   a;
};

template   <class   T>
class   C1
{
public:
        vector <   S1 <T> *   >   v1;
        void   dosth();
};

template   <class   T>
void   C1::dosth()
{
        vector <   S1 <T> *   > ::iterator   iter   =   v1.begin();
        for(;   iter   !=   v1.end();   ++iter)
        {
                cout < <**iter < <endl;
        }
}

int   main()
{

return   0;
}


------解决方案--------------------
template <class T>
void C1::dosth()
{
vector < S1 <T> * > ::iterator iter = v1.begin();
for(; iter != v1.end(); ++iter)
{
cout < <**iter < <endl;
}
}

-->

template <class T>
void C1 <T> ::dosth()
{
vector < S1 <T> * > ::iterator iter = v1.begin();
for(; iter != v1.end(); ++iter)
{
cout < <**iter < <endl;
}
}
------解决方案--------------------
en
------解决方案--------------------
void C1 <T> ::dosth()
...
------解决方案--------------------
#include <iostream>
#include <vector>

using namespace std;

template <class T>
struct S1
{
T a;
};

template <class T>
class C1
{
public:
vector < S1 <T> * > v1;
void dosth();
};

template <class T>
void C1 <T> ::dosth() <======这里差了一个参数
{
typename vector < S1 <T> * > ::iterator iter = v1.begin(); <==========还需要一个typename
for(; iter != v1.end(); ++iter)
{
cout < <**iter < <endl;
}
}

int main()
{
};