• 类模板的分文件编写的问题和解决(要引入.cpp而不是头文件)


    分文件解决

    • .h .cpp分别写声明和实现
    • 但是由于 类模板的成员函数运行阶段才去创建,导致包含.h头文件,不会创建函数的实现,无法解析外部命令
    • 解决方案  保护 .cpp文件 (不推荐)
    • 不要进行分文件编写,写到同一个文件中,进行声明和实现,后缀名改为.hpp
    • 约定俗成的 (.hpp文件即分文件模板文件)

    头文件

    Person.h

    #pragma once
    #include <iostream>
    using namespace std;
    
    template<class T1, class T2>
    class Person
    {
    public:
        Person(T1 name, T2 age);
        void showPerson();
    
        T1 m_Name;
        T2 m_Age;
    };

    Person.cpp

    #include "Person.h"
    
    template<class T1, class T2>
    Person<T1, T2>::Person(T1 name, T2 age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }
    
    template<class T1, class T2>
    void Person<T1, T2>::showPerson()
    {
        cout << "姓名:" << this->m_Name << " 年龄: " << this->m_Age << endl;
    }

    main

    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    using namespace std;
    #include "Person.h"
    
    void test01()
    {
        Person<string, int>p("猪八戒", 30);    //error 无法解析的外部命令
        p.showPerson();                        //error
    }
    
    int main()
    {
        test01();
        system("Pause");
        return 0;
    }

    无法运行:

    解决办法:

    main中引入.cpp文件

     结果:

    建议

    模板不要分文件编写,写到一个类中即可,类内进行声明和实现,最后把后缀名改为.hpp 约定俗成  

    把Person.cpp的内容放入Person.h中 并把Person.h改后缀为 Person.hpp

    #pragma once
    #include <iostream>
    using namespace std;
    
    template<class T1, class T2>
    class Person
    {
    public:
        Person(T1 name, T2 age);
        void showPerson();
    
        T1 m_Name;
        T2 m_Age;
    };
    template<class T1, class T2>
    Person<T1, T2>::Person(T1 name, T2 age)
    {
        this->m_Name = name;
        this->m_Age = age;
    }
    
    template<class T1, class T2>
    void Person<T1, T2>::showPerson()
    {
        cout << "姓名:" << this->m_Name << " 年龄: " << this->m_Age << endl;
    }

     结果:

  • 相关阅读:
    第三方类AFNetworking(一)
    objective-C nil,Nil,NULL 和NSNull的小结
    DOM解析XML文件
    设置导航栏字体大小,颜色和加粗字体的方法
    数据本地化之沙盒机制
    本地存储Sqlite的用法:
    iOS面试题
    iOS 知识-常用小技巧大杂烩
    怎么升级iOS10教程
    2016WWDC详解
  • 原文地址:https://www.cnblogs.com/yifengs/p/15181343.html
Copyright © 2020-2023  润新知