【问题标题】:Cast Operator with template class带有模板类的强制转换运算符
【发布时间】:2012-06-14 20:24:21
【问题描述】:

我想重载一个强制转换运算符, 我有以下代码:

template <typename _T>
class CTest
{
public :
    _T data;

    CTest(_T _data) : data(_data) {}
    ~CTest() {}

    operator _T(){ return data; }
};

和 MS Visual Studio 2005,给我以下错误:

警告 C4003:宏 'T' 的实际参数不足 警告 C4003:宏 '_T' 的实际参数不足 错误 C2833:“运算符 L”不是可识别的运算符或类型 请参阅对正在编译的类模板实例化“CTest<_t>”的引用 错误 C2059:语法错误:“换行符” 错误 C2334:“{”之前的意外标记;跳过明显的函数体 错误 C2833: 'operator L' 不是可识别的运算符或类型

如何正确声明operator _T()

【问题讨论】:

  • 带有前导下划线的名称保留用于实现。你偶然发现了一个。只需删除下划线即可编译。
  • 特别是前导下划线,后跟大写字母。

标签: c++ templates visual-studio-2005


【解决方案1】:

_T 是一个 WINAPI 宏(参见Generic-Text Mappings in Tchar.hShould I use _T or _TEXT on C++ string literals?):将_T 更改为T

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2012-06-21
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多