我有一个头文件RandFunctions.hpp
,其中包含模板函数
#ifndef _RANDFUNCTIONS_HPP_
#define _RANDFUNCTIONS_HPP_
#include <stdlib.h>
#include <time.h>
namespace surena
{
namespace common
{
template<typename RealT> inline
RealT
RealRandom()
{
return rand()/(RealT(RAND_MAX)+1);
}
};
};
#endif
另一个标题文件Search.hpp
,其中包含RandFunctions.hpp
,
#ifndef _SEARCH_HPP_
#define _SEARCH_HPP_
#include "RandFunctions.hpp"
#include <stdlib.h>
#include <time.h>
namespace surena
{
namespace search
{
template<typename RealT>
class CTest
{
public:
CTest() {srand((unsigned)(time(0)));}
RealT
GenRand(){ return common::RealRandom(); }
};
};
};
#endif
当我将Search.hpp
包含在cpp
文件中时,例如,
#include "Search.hpp"
int
main(int argc, char** argv)
{
CTest<float> test;
return(0);
}
我收到以下编译时错误:
‘RealRandom’ is not a member of ‘surena::common’
这里有什么问题?
答案 0 :(得分:1)
由于RealRandom
是没有参数的模板函数,因此需要提供模板参数:
GenRand(){ return common::RealRandom<RealT>(); }
^^^^^^^
同样在您的主要内容中,您必须使用正确的命名空间限定test
变量:
surena::search::CTest<float> test;
^^^^^^^^^^^^^^^^