我正在做作业,我必须编写一个模板,然后将模板实现到驱动程序中。不幸的是,我在编译时收到错误。我刚刚开始学习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退出状态
感谢。
答案 0 :(得分:3)
static int number
。在课堂外添加以下定义。
template <class T> int LinkedQueue<T>::number = 0;
static
成员特殊,类中的static int number
只是一个声明而不是定义。这是因为标头通常包含在多个转换单元中,因此C ++强制您通常在cpp文件中将它们定义在类之外,这样就不会出现多个定义错误。