class T : public std::string {  
public:  
    T(char* s) : std::string(s){};  
};  
class X : public T {  
public:  
    X(char* s) : T(s) {};  
    ~X() {};  
};  
template <typename T> T doIt(const T arg);  
int main(int argc, const char* argv[]) {  
    X s("initial string");  
    T s2 = doIt(s);  
    printf("out %s", s2.c_str());  
}  
T doIt(T arg) {  
    arg.append(" appended");  
    return arg;  
};
What is the problem with my code.. the output is bellow...
1>Linking...
1>TemplateStuding1.obj : error LNK2001: unresolved external symbol "class X __cdecl doIt(class X)" (??$doIt@VXClass@@@@YA?AVXClass@@V0@@Z)
1>D:\Programming\cpp\cpp-how-to-program\CppHowToProgram\Release\Test.exe : fatal error LNK1120: 1 unresolved externals
 
     
     
    