2015-12-01 3 views
0

У меня есть файл заголовка, 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

Используйте компилятор [с более точными диагностическими сообщениями] (http://ideone.com/ENZpBQ). –

ответ

1

Поскольку RealRandom является функцией шаблона без параметров, вы должны предоставить аргумент шаблона:

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

Также в главном вы должны квалифицировать Ваш test переменного с соответствующими пространствами имен:

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

Теперь я получаю две дополнительные ошибки: «ожидаемое первичное выражение перед»> «токен» и «ожидаемое первичное выражение перед») «токен» – Rasoul

+0

@Rasoul посмотрите мое обновление. – 101010

Смежные вопросы