首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一个模板链接有关问题,搞不定

2013-03-14 
一个模板链接问题,搞不定,求助写了个简单的模板类 Urandstd::size_t N,但链接通不过,把实现代码 Urand.c

一个模板链接问题,搞不定,求助
写了个简单的模板类 Urand<std::size_t N>,但链接通不过,把实现代码 Urand.cpp 合到头文件 Urand.h 中就可以通过链接,但分开却报错,求熟手帮忙诊断一下。


// Urand.h
#ifndef _URAND_H_
#define _URAND_H_

#include <bitset>

namespace zhcosin
{

template<std::size_t UpperBound>
class Urand
{
public:
Urand();
~Urand();

public:
std::size_t operator()();

private:
std::bitset<UpperBound>theBitSet;
};

} // namespace zhcosin

#endif //_URAND_H_


// Urand.cpp
#include "Urand.h"
#include <cstdlib>
#include <ctime>

namespace zhcosin
{

template<std::size_t UpperBound> 
Urand<UpperBound>::Urand()
{
srand(time(0));
}

template<std::size_t UpperBound>
Urand<UpperBound>::~Urand()
{

}

template<std::size_t UpperBound>
std::size_t Urand<UpperBound>::operator ()()
{
if (theBitSet.count() == UpperBound)
theBitSet.reset();

std::size_t newVal;
while (theBitSet[newVal = rand() % UpperBound]);
theBitSet[newVal] = true;
return newVal;
}

} // namespace zhcosin


// main.cpp
#include <iostream>
#include "Urand.h"

int main(int argc, char *argv[])
{
zhcosin::Urand<10> a;
for (int i = 0; i < 10; i++)
{
std::cout << a() << ",";
}
std::cout << std::endl;
return 0;
}

链接错误信息如下:
1>------ Build started: Project: Urand, Configuration: Debug Win32 ------
1>Compiling...
1>Urand.cpp
1>Linking...
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall zhcosin::Urand<10>::~Urand<10>(void)" (??1?$Urand@$09@zhcosin@@QAE@XZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: unsigned int __thiscall zhcosin::Urand<10>::operator()(void)" (??R?$Urand@$09@zhcosin@@QAEIXZ) referenced in function _main
1>main.obj : error LNK2019: unresolved external symbol "public: __thiscall zhcosin::Urand<10>::Urand<10>(void)" (??0?$Urand@$09@zhcosin@@QAE@XZ) referenced in function _main
1>C:\Users\zhcosin\Documents\Visual Studio 2008\Projects\Urand\Debug\Urand.exe : fatal error LNK1120: 3 unresolved externals
1>Build log was saved at "file://c:\Users\zhcosin\Documents\Visual Studio 2008\Projects\Urand\Debug\BuildLog.htm"
1>Urand - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== C++ 模板 链接错误
[解决办法]
模板没有链接,所以其定义要放在头文件。

热点排行