发新话题
打印

帮助 linunx C++ 学习 template class

帮助 linunx C++ 学习 template class

TArray.h
#idndef TARRAY_H
#define TARRAY_H
template < class elemType >
class TArray {
explicit TArray ( int size = DefaultArraySize );
~TArray() { delete [] ia; }

int size () const { return _size; }
elemType operator[]( int index ) const { return ia[index]; }
#endif

TArray.cpp
#include "TArray.h"
template <class elemType>
TArray<elemType>::TArray( int size )
{
   _size = size;
   ia = new elemType[_size];
   for( int index = 0; index < _size; index++ )
      ia[index]=index;
}

useTArray.cpp
#include <iostream>
#include "TArray.h"
int main()
{
   TArray<int> arr1(8);
   TArray<double> arr2;

   return 0;
}

g++ useTArray.cpp TArray.cpp -g -o useTA
说:undefined reference to 'TArray<int>::TArray(int)'
        undefined reference to 'TArray<double>::TArray(int)'

当把 useTArray.cpp 中 "TArray.h" 换成 "TArray.cpp" 时,无错误,请教

TOP

错误太多!请重新写!
'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间

TOP

看楼主的类定义法,嘿嘿,还以为是Dephi……
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

Template好像定义同声明要在同一个.h文件里

TOP

先看一下这条命令:
g++ useTArray.cpp TArray.cpp -g -o useTA
实现是,编译useTArray.cpp, 发现
TArray<int> arr1(8);
TArray<double> arr2;
所以需要替换,但是此时编译器认为在其他地方已经展开了,所以就要等到ld的时候做。
同时,TArray.cpp ,没有说明一定要展开int, double阿?
所以在ld的时候就会发现没有定义。

事实上,有两种方法可以实现,一个是包含include模式,就是楼上地说的放在.hxx里面。
但是这样可能造成代码的膨胀。
另外一种是重新写一个文件instantiation.cxx,然后进行特化
#include TArray.hxx
template<>
class TArray<int>{};
class TArray<double>{};
g++ useTArray.cpp TArray.cpp instantiation.cxx -g -o useTA
当然这样还是有问题,特别是项目很大的时候,会出现重复instantiation。
一般采用include 模型.

建议你看看C++ template

TOP

我大致看了一下,错误如下:
1、你的代码打错字的地方有好几处,譬如:TArray.h中,#ifndef你打成了#iddef,汗,这种错误是写代码的时候难以避免的,可是却是最头疼的,不该犯的错误,宁可打慢点,也要确保一次打正确,这好像小学生都知道的
2、TArray.h中类的最后你忘了};再汗一个
3、你的类中的成员函数全部声明为私有,狂汗,你强
4、最后再汗一次,你的代码我是没法再看下去了,简直就是一团乱麻
我看楼主还是回去好好看C++ Primer 和Thinking in C++,再看看HoUJJ的Generic Programming and STL,或者是C++ Template吧。。。
基础是最重要的,不要急于求成,慢慢来
一步一步

TOP

可以用一些代码自动补全工具来解决以上一二点问题... 0_0
我对linux一窍不通^_^

TOP

TEMPLATE 两种编译模式
包含和分离.

LZ自己去看看吧

TOP

发新话题