u010576908
2016-03-28 15:17
采纳率: 100%
浏览 3.2k
已采纳

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • blownewbee 2016-03-28 15:27
    已采纳

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

    点赞 打赏 评论
  • 林深 2016-03-28 15: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 2016-03-28 15: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 2016-03-28 15: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 2016-03-29 09: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";
    }

    点赞 打赏 评论

相关推荐 更多相似问题