put the code to .h file error gone why?
Hi all
I wrote some source code to study,
but I have problem: If I wrote the implement code to .h file directly
code can pass the complie, if I put the code to .cpp file ,it fails , why?
Here's the source code:
[key9@localhost unit]$ gcc -o test test.cpp -lstdc++
/home/key9/tmp/ccgdxJIB.o(.text+0x1c2): In function `main':
: undefined reference to `LinuxTestTerminal::printch(char*)'
/home/key9/tmp/ccgdxJIB.o(.gnu.linkonce.t._ZN17LinuxTestTerminalC1Ev+0x19):
In function `LinuxTestTerminal::LinuxTestTerminal()':
: undefined reference to `vtable for LinuxTestTerminal'
collect2: ld returned 1 exit status
Source code:
********/Terminal.h/*********
#ifndef __TERMINAL_H_
#define __TERMINAL_H_
class Terminal{ // this is virtual class of terminal
public:
virtual void printch(char*) =0;
virtual void backSpace() = 0;
virtual void printCR() = 0;
virtual void printTab() =0;
private:
};
#endif // __TERMINAL_H_
********/LinuxTerminal.h/*********
#ifndef __LINUXTESTTERMINAL_H_
#define __LINUXTESTTERMINAL_H_
#include "Terminal.h"
class LinuxTestTerminal : public Terminal{
public:
void printch(char*);
void backSpace();
void printCR();
void printTab();
};
#endif //__LINUXTESTTERMINAL_H_
********/LinuxTerminal.cpp/*********
#include <stdio.h>
#include "Terminal.h"
void
LinuxTestTerminal::printch(char* ch){
printf("%c",*ch);
}
void
LinuxTestTerminal::backSpace(){
printf("/b");
}
void
LinuxTestTerminal::printCR(){
printf("/n");
}
void
LinuxTestTerminal::printTab(){
printf(" ");
}
********/test.cpp/*********
//use -lstdc++
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <iostream>
#include "Terminal.h"
#include "LinuxTerminal.h"
class Terminal;
using namespace std;
int mygetch( ) {
struct termios oldt,newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}
int main(int argc, char *argv[])
{
printf("new line of doing test");
LinuxTestTerminal lt;
lt.printch("dsadadasdasd");
while(mygetch());
}
*********************************
another /LinuxTerminal.h/, delete the LinuxTerminal.cpp file
#ifndef __LINUXTESTTERMINAL_H_
#define __LINUXTESTTERMINAL_H_
#include "Terminal.h"
class LinuxTestTerminal : public Terminal{
public:
void printch(char* ch){
printf("%c",*ch);
}
void backSpace(){
printf("/b");
}
void printCR(){
printf("/n");
}
void printTab(){
printf(" ");
}
};
#endif //__LINUXTESTTERMINAL_H_