模板代码结构书写浅谈

当前项目目录:
在这里插入图片描述
A.h

#ifndef A_H
#define A_H
#include "iostream"
template<typename T>
class A {
    
    
public:
    void fun();
};

#endif

A.cpp

#include "A.h"
template <typename T>
void A<T>::fun()
{
    
    

}

main.cpp

#include<iostream>
#include "A.h"
int main(int argc, char* argv[])
{
    
    
   A<int> obj; //ok
   obj.fun();//出现了未定义的情况
    return 0;
}

编译提示:
在这里插入图片描述
分析:
未定义情况分析:编译是以源文件为单位进行编译的,
我们虽然包含了A.h文件,但是,fun函数对于mian.cpp文件来说
是还没有实例化的,虽然我们实例化了一个类A,A, 但是,里面的成员函数,并不会因此而实例化,而要等到我们调用是才会实例化, 但是,这里我们调用了fun函数,而这个函数的定义在A.cpp当中,对于main.cpp这个编译单元来说,显然是不行的,所以这里会有未定义的报错。

所以一般把模板的定义写在.h文件里。

猜你喜欢

转载自blog.csdn.net/qq_38158479/article/details/121420362