2 u010576908 u010576908 于 2016.03.28 23:17 提问

一个头文件中的类继承另一个头文件中的类,应该怎么写 10C

如题,查了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;
}

6个回答

caozhy
caozhy   Ds   Rxr 2016.03.28 23:27

B.cpp中没有include B.h么?

leilba
leilba   Rxr 2016.03.28 23:28

你需要改两个文件:
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";
}

一定要注意,一定要加对应的类的头文件,不然的话是类和方法是对应不起来的

lm_whales
lm_whales   Rxr 2016.03.28 23:32

一种方法,以顺序依赖替换编译依赖
//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;
}

大约也就是这样吧

lm_whales
lm_whales   Rxr 2016.03.28 23:33

一种方法,以顺序依赖替换编译依赖
//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;
}

大约也就是这样吧

Mr__Hacker
Mr__Hacker   2016.03.29 17:04

#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";
}

CSDNXIAON
CSDNXIAON   2016.03.30 11:29

c++ 一个头文件引用另一个头文件的类
c++ 一个头文件引用另一个头文件的类
c++ 一个头文件引用另一个头文件的类
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!