未定义的参考C ++队列模板处理字符串

时间:2012-10-04 21:40:54

标签: c++ templates queue

我正在做作业,我必须编写一个模板,然后将模板实现到驱动程序中。不幸的是,我在编译时收到错误。我刚刚开始学习C ++的更复杂的方面,我不知道如何解决这个问题。

/tmp/ccdvvLpF.o:main.cpp :(。text $ _ZN11LinkedQueueISsE7enqueueERKSs [LinkedQueue,std :: allocator&gt;&gt; :: enqueue(std :: basic_string,std :: allocator&gt; const&amp;)] + 0x4a):未定义引用LinkedQueue<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::number' /tmp/ccdvvLpF.o:main.cpp:(.text$_ZN11LinkedQueueISsE7enqueueERKSs[LinkedQueue<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::enqueue(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)]+0x66): undefined reference to LinkedQueue,std :: allocator&gt; &GT; ::数&#39; /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld:/tmp/ccdvvLpF.o:错误的重定位地址0x66在`.text $ _ZN11LinkedQueueISsE7enqueueERKSs [LinkedQueue,std :: allocator&gt; &gt; :: enqueue(std :: basic_string,std :: allocator&gt; const&amp;)]&#39; collect2:ld返回1退出状态

感谢。

1 个答案:

答案 0 :(得分:3)

永远不会定义

static int number。在课堂外添加以下定义。

template <class T> int LinkedQueue<T>::number = 0;

static成员特殊,类中的static int number只是一个声明而不是定义。这是因为标头通常包含在多个转换单元中,因此C ++强制您通常在cpp文件中将它们定义在类之外,这样就不会出现多个定义错误。