still problem of organize file
Hi all
on last post I confused on how to organize file of class, ok ,the problem
solved : should include class define head on cpp file.
but this time ,still link error:
strange is I put the implement to .h file directly like this:
*******head file*****
class LinuxTestTerminal : public Terminal{
public:
void printch(char ch){
fprintf(stdout,"%c",ch); <--- directly implement here
}
};
there's no error occur;
but when I wrote the .cpp file,(same name as .h file)
*******head file*****
class LinuxTestTerminal : public Terminal{
public:
void printch(char ch);
};
*******cpp file******
#include "LinuxTestTerminal.h"
void
LinuxTestTerminal::printch(char ch){
fprintf(stdout,"%c",ch);
}
error occurs: undefined reference of printch();
What's on earth the problem is?
thank you very much!
key9
completed code here : cygwin enviroment
// test.cpp
// use -lstdc++
#include <stdio.h>
#include <unistd.h>
#include <iostream>
#include "LinuxTerminal.h"
using namespace std;
//this printch function is just for test ,direct use this can pass the test
print
/* void printch(char ch){
fprintf(stdout,"%c",ch);
}
*/
int main(int argc, char *argv[])
{
char q = 'c';
printf("print a new line of doing test");
LinuxTestTerminal* lt = new LinuxTestTerminal();
lt->printch(q);
//printch(q); // direct use this can pass, but lt->printch(q) can not
,why?
while(true); // test perpose loop
}
***********************************
// Terminal.h
#ifndef __TERMINAL_H_
#define __TERMINAL_H_
class Terminal{ // this is virtual class of terminal
public:
/* <--- comment for test perpose since can not pass the complie
virtual void printch(char) = 0;
virtual void backSpace() = 0;
virtual void printCR() = 0;
virtual void printTab() = 0;
*/
};
#endif // __TERMINAL_H_
***********************************
// LinuxTerminal.h
#ifndef __LINUXTERMINAL_H_
#define __LINUXTERMINAL_H_
#include "Terminal.h"
class LinuxTestTerminal : public Terminal{
public:
void printch(char ch);
void backSpace();
void printCR();
void printTab();
};
#endif // __LINUXTERMINAL_H_
****************************************
// LinuxTerminal.cpp
#include "LinuxTestTerminal.h" // this time, add this line
void
LinuxTestTerminal::printch(char ch){
fprintf(stdout,"%c",ch);
}
void
LinuxTestTerminal::backSpace(){
fprintf(stdout,"/b")
}
void
LinuxTestTerminal::printCR(){
fprintf(stdout,"/n");
}
void
LinuxTestTerminal::printTab(){
fprintf(stdout,"/t");
}