#c #visual-studio #visual-studio-2019 #c 20
Вопрос:
Я столкнулся с проблемой при попытке использовать новые функции C (модуль), код выглядит следующим образом:
//Module.ixx
export module Module;
import <string>;
import <iterator>;
import <sstream>;
import <iomanip>;
import <cstdint>;
template<typename T>
class blake_mixin
{
public:
};
template<typename T, size_t N>
struct stream_width_fixer
{
stream_width_fixer(T value) : v(value) {}
T v;
};
template<typename T, size_t N>
std::ostreamamp; operator<<(std::ostreamamp; ostr, const stream_width_fixer<T, N>amp; value)
{
return ostr << std::setw(N) << value.v;
}
template<typename T>
struct null_mixin
{
//for example
void sample()
{
std::ostringstream someone;
}
};
class blake_provider
{
public:
static const bool is_xof = false;
blake_provider(size_t hashsize)
{
}
~blake_provider()
{
}
};
template<class HashProvider, template <class> class Mixin = null_mixin>
class hasher : public Mixin<HashProvider>
{
public:
template<typename H = HashProvider>
hasher(size_t hashsize) : provider(hashsize)
{
}
template<typename H = HashProvider>
inline std::string hexdigest() const
{
std::ostringstream res;
res << std::setfill('0') << std::hex;
return res.str();
}
private:
friend Mixin<HashProvider>;
HashProvider provider;
};
export typedef hasher<blake_provider, blake_mixin> blake;
//main.cpp
import Module;
int main()
{
blake(256).hexdigest();
}
Пожалуйста, простите за загроможденность кода, код не имеет практического значения и используется только для демонстрации проблемы. Поскольку я хочу задавать вопросы более кратко, я упростил многие детали, но проблема предельно ясна. Мне нужно только добавить эту строку кода в любой класс, и он будет успешно скомпилирован,
void sample()
{
std::ostringstream someone;
}
но я думаю, что такое поведение бессмысленно, и я застрял в замешательстве, пожалуйста, скажите мне, где я ошибаюсь. Большое спасибо
Если этот код не добавлен, появится сообщение об ошибке
(68,28): error C2079: 'res' uses undefined class 'std::basic_ostringstream<char,std::char_traits<char>,std::allocator<char>>'
Инструмент разработки, который я использую, — VS2019, и я также пробовал его на VS2020, и они столкнутся с той же проблемой.
Комментарии:
1. Я не уверен, что понимаю. Ошибка возникает в hexdigest. Что означает фраза «Мне нужно только добавить эту строку кода в любой класс, и он будет успешно скомпилирован…» Можете ли вы уточнить: что вы добавляете к тому, что устраняет ошибку?
2. Спасибо вам за ваш ответ. Я пересмотрел вопрос, чтобы его было легче понять. Меня до сих пор беспокоит этот вопрос. Я с нетерпением жду вашего ответа.