gpt4 book ai didi

c++ - 模板函数不是命名空间的成员

转载 作者:行者123 更新时间:2023-11-28 05:56:40 24 4
gpt4 key购买 nike

我有一个头文件,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’

这里有什么问题吗?

最佳答案

由于 RealRandom 是一个没有参数的模板函数,您需要提供一个模板参数:

GenRand(){ return common::RealRandom<RealT>(); }
^^^^^^^

同样在您的 main 中,您必须使用适当的命名空间来限定您的 test 变量:

surena::search::CTest<float> test;
^^^^^^^^^^^^^^^^

关于c++ - 模板函数不是命名空间的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34026844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com