当前位置: 技术问答>linux和unix
模板类库,连接失败
来源: 互联网 发布时间:2017-01-11
本文导语: 学习模板,写了个很简单的模板类,先把模板类生成库文件,生成成功,但是最后连接的时候失败。 模板类头文件temp.h #ifndef _HHHHHHH_ #define _HHHHHHH_ template class CTest { public: T m_num; public: CTest(); ~C...
学习模板,写了个很简单的模板类,先把模板类生成库文件,生成成功,但是最后连接的时候失败。
模板类头文件temp.h
#ifndef _HHHHHHH_
#define _HHHHHHH_
template
class CTest
{
public:
T m_num;
public:
CTest();
~CTest();
public:
T add( T _num );
};
class TT
{
public:
void func();
};
#endif
复制代码
模板类CPP文件temp.cpp:
#include "temp.h"
#include
template
CTest::CTest():m_num(0)
{
}
template
CTest::~CTest()
{
}
template
T CTest::add( T _num )
{
return _num + 10;
}
void TT::func()
{
printf("AAAAAAAAAAAAAAAAAAAAAAAAn");
}
复制代码
主函数main.cpp:
#include
#include "temp.h"
int main( int argc, char **argv )
{
printf("==================n");
CTest tt;
printf("rst = [%d]n"tt.add( 11 ));
//TT obj;
//obj.func();
printf("==================n");
return 0;
}
复制代码
编译规则:
g++ -c main.cpp
g++ temp.cpp -fPIC -shared -o libtemp.so
g++ -o run main.o -ltemp -L./
执行 g++ -o run main.o -ltemp -L./ 时报错 :
main.o(.text+0x24): In function `main':
: undefined reference to `CTest::CTest[in-charge]()'
main.o(.text+0x37): In function `main':
: undefined reference to `CTest::add(int)'
main.o(.text+0x6e): In function `main':
: undefined reference to `CTest::~CTest [in-charge]()'
main.o(.text+0x81): In function `main':
: undefined reference to `CTest::~CTest [in-charge]()'
collect2: ld returned 1 exit status
模板类头文件temp.h
#ifndef _HHHHHHH_
#define _HHHHHHH_
template
class CTest
{
public:
T m_num;
public:
CTest();
~CTest();
public:
T add( T _num );
};
class TT
{
public:
void func();
};
#endif
复制代码
模板类CPP文件temp.cpp:
#include "temp.h"
#include
template
CTest::CTest():m_num(0)
{
}
template
CTest::~CTest()
{
}
template
T CTest::add( T _num )
{
return _num + 10;
}
void TT::func()
{
printf("AAAAAAAAAAAAAAAAAAAAAAAAn");
}
复制代码
主函数main.cpp:
#include
#include "temp.h"
int main( int argc, char **argv )
{
printf("==================n");
CTest tt;
printf("rst = [%d]n"tt.add( 11 ));
//TT obj;
//obj.func();
printf("==================n");
return 0;
}
复制代码
编译规则:
g++ -c main.cpp
g++ temp.cpp -fPIC -shared -o libtemp.so
g++ -o run main.o -ltemp -L./
执行 g++ -o run main.o -ltemp -L./ 时报错 :
main.o(.text+0x24): In function `main':
: undefined reference to `CTest::CTest[in-charge]()'
main.o(.text+0x37): In function `main':
: undefined reference to `CTest::add(int)'
main.o(.text+0x6e): In function `main':
: undefined reference to `CTest::~CTest [in-charge]()'
main.o(.text+0x81): In function `main':
: undefined reference to `CTest::~CTest [in-charge]()'
collect2: ld returned 1 exit status
|
模板类只需要头文件即可,声明与实现都放在头文件里.
多目标文件链接不会出现redefined,模板是很特殊的。
|
++
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。