我有这样的结构:
struct S_SPECIAL_EVENT
{
BOOL bEventAllDay{};
friend CArchive& operator<<(CArchive& rArchive, S_SPECIAL_EVENT const& rsSE)
{
const WORD wVersion = 1;
return rArchive << wVersion
<< gsl::narrow<bool>(rsSE.bEventAllDay);
}
friend CArchive& operator>>(CArchive& rArchive, S_SPECIAL_EVENT &rsSE)
{
WORD wVersion{};
rArchive >> wVersion;
rsSE.bEventAllDay = readAndCast<BOOL, bool>(rArchive);
return rArchive;
}
};
我尝试添加两个序列化运算符。但我会遇到以下编译错误:
错误C3861:“readAndCast”:找不到标识符
有问题的方法在应用程序标头中定义:
template <typename T, typename U>
T readAndCast(CArchive& ar) {
U x;
ar >> x;
return static_cast<T> (x);
}
我已将该标头包含在我的文件中。那么,为什么它不符合要求呢?
我更改了代码以手动执行操作:
friend CArchive& operator>>(CArchive& rArchive, S_SPECIAL_EVENT &rsSE)
{
WORD wVersion{};
bool bData{};
rArchive >> wVersion;
rArchive >> bData;
rsSE.bEventAllDay = gsl::narrow<BOOL>(bData);
return rArchive;
}
但我想知道原来问题的答案。