如题,查了c++primer,也没有详细解释。提示如下错误
g++ -O2 main.cpp -lm -o main
C:\Users\Traeyee\AppData\Local\Temp\ccgVqs5n.o:main.cpp:(.text.startup+0x13): undefined reference to `test2::show2()'
collect2.exe: error: ld returned 1 exit status
//A.h
#ifndef A_H
#define A_H
class test1
{
public:
void show();
};
#endif
//A.cpp
void test1::show()
{
cout << "TTT" << endl;
}
//B.h
#ifndef B_H
#define B_H
#include "A.h"
class test2 : public test1
{
public:
void show2();
};
#endif
//B.cpp
void test2::show2()
{
cout << "2222\n";
}
//main.cpp
#include <iostream>
#include "A.h"
#include "B.h"
using namespace std;
int main()
{
test2 TP;
TP.show2();
return 0;
}
B.cpp中没有include B.h么?
#include "A.h"
#include
using namespace std;
void test1::show()
{
cout << "TTT" << endl;
}
#include "B.h"
#include
using namespace std;
void test2::show2()
{
cout << "2222\n";
}
你需要改两个文件:
A.cpp
#include "A.h"
#include <iostream>
using namespace std;
void test1::show()
{
cout << "TTT" << endl;
}
B.cpp
#include "B.h"
#include <iostream>
using namespace std;
void test2::show2()
{
cout << "2222\n";
}
一定要注意,一定要加对应的类的头文件,不然的话是类和方法是对应不起来的
一种方法,以顺序依赖替换编译依赖
//A.h
class A{......
void fun();
};
//A.cpp
void A::fun(){....};
//B.h
class B{
void fun_test();
};
//B.cpp
#include "A.h" // 这两行永远按照这个顺序包含
#include "B.h" //
void B::fun_test(){
............
}
//main.cpp
#include
#include "A.h"
#include "B.h"
int main(){
B b;
b.fun_test();
return 0;
}
一种方法,一劳永逸,但是有编译依赖
//A.h
class A{......
void fun();
};
//A.cpp
void A::fun(){....};
//B.h
#include "A.h"
class B{
void fun_test();
};
//B.cpp
//#include "B.h"
void B::fun_test(){
............
}
//main.cpp
#include
#include "B.h"
int main(){
B b;
b.fun_test();
return 0;
}
大约也就是这样吧
一种方法,以顺序依赖替换编译依赖
//A.h
class A{......
void fun();
};
//A.cpp
void A::fun(){....};
//B.h
class B{
void fun_test();
};
//B.cpp
#include "A.h" // 这两行永远按照这个顺序包含
#include "B.h" //
void B::fun_test(){
............
}
//main.cpp
#include
#include "A.h"
#include "B.h"
int main(){
B b;
b.fun_test();
return 0;
}
一种方法,一劳永逸,但是有编译依赖
//A.h
class A{......
void fun();
};
//A.cpp
void A::fun(){....};
//B.h
#include "A.h"
class B{
void fun_test();
};
//B.cpp
//#include "B.h"
void B::fun_test(){
............
}
//main.cpp
#include
#include "B.h"
int main(){
B b;
b.fun_test();
return 0;
}
大约也就是这样吧