2015-09-17 2 views
0

У меня возникли проблемы со следующим кодом:C++ шаблонный метод в заголовочном файле

#ifndef UTILS_H 
#define UTILS_H 
#include <cstdint> 
#include <iostream> 


namespace Utils 
{ 
    template<class T> 
    std::string hexify(T val) 
    { 
     std::stringstream stream; 
     stream << "0x" 
      << std::setfill('0') << std::setw(sizeof(T) * 2) 
      << std::hex << val; 
     return stream.str(); 
    } 
}; 

#endif 

Он говорит мне, что «„setw“: идентификатор не найден», и то же самое для каждого станд :: функции вызов.

Что в этом плохого?

+8

'#include ' – 101010

+2

Check например [эта ссылка на манипулятор ввода/вывода] (http://en.cppreference.com/w/cpp/io/manip). –

+0

[std :: setw] (http://en.cppreference.com/w/cpp/io/manip/setw) –

ответ

3

Ширина поля (setw) принадлежит к <iomanip>, которые вы не указали в коде. Попробуйте этот код:

#ifndef UTILS_H 
#define UTILS_H 
#include <cstdint> 
#include <iostream> 
#include <iomanip> 
#include <string> 
#include <sstream>  

namespace Utils 
{ 
    template<class T> 
    std::string hexify(T val) 
    { 
     std::stringstream stream; 
     stream << "0x" 
      << std::setfill('0') << std::setw(sizeof(T) * 2) 
      << std::hex << val; 
     return stream.str(); 
    } 
}; 

#endif 

для получения дополнительной информации: http://www.cplusplus.com/reference/iomanip/setw/

+0

'stringstream' также нуждается в include. –

+1

Кроме того, иногда cppreference.com является более точным, чем cplusplus.com ... –

+1

@ KonradRudolph проверьте это http://stackoverflow.com/questions/9539650/why-does-omission-of-include-string-only-sometimes- cause-compilation-failur –

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