0

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

/tmp/ccdvvLpF.o:main.cpp: (.text$_ZN11LinkedQueueISsE7enqueueERKSs[LinkedQueue, std::allocator > >::enqueue(std::basic_string, std::allocator > const&)]+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 toLinkedQueue的未定义引用, std::allocator > >::number' /usr/lib/gcc/i686-pc-cygwin/4.5.3/../../../../i686-pc-cygwin/bin/ld: /tmp/ccdvvLpF.o: `.text$_ZN11LinkedQueueISsE7enqueueERKSs [LinkedQueue, std::allocator > >::enqueue(std::basic_string, std::allocator > const&)]' 部分中的错误重定位地址 0x66: ld 返回 1退出状态

谢谢。

4

1 回答 1

3

static int number从未定义。在您的课程之外添加以下定义。

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

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

于 2012-10-04T21:47:19.437 回答