代码之家  ›  专栏  ›  技术社区  ›  tangoal

调用模板类成员时非法使用此类型作为表达式

  •  1
  • tangoal  · 技术社区  · 8 年前

    我对静态类成员的使用有问题 size 类的 SizeObj ,用作模板类的模板参数 SizeTemplate

    事实上,下面的代码在MS VS2008之前运行良好,但现在编译失败了

    error C2275: 'K' : illegal use of this type as an expression
    error C2228: left of '.size' must have class/struct/union
    

    需要指出的是,只有当 getSize 至少打过一次电话。

    请不要询问下面代码的意义,正如我所说的,我将其简化为 最基本的解释。然而,我必须承认 由于以下几个原因,成员“size”的用法不是很优雅,也许 有很多更好的解决方案,但目前我别无选择

    设置还是类似的?我还没有找到合适的。

    在下面的帖子中,这很容易,因为类K的一个实例可用,但对于我的问题,我不知道如何正确获取该实例:

    
    //myTemplate.h
    
    class SizeObj
    {
    public:
        static const int size = 1;
    };
    
    template<class K>
    class SizeTemplate
    {
    public:
        int getSize();
    };
    
    template<class K>
    int SizeTemplate<K>::getSize()
    {
        return K.size;
    }
    
    //main.cpp
    
    int main(...)
    {
        SizeTemplate<SizeObj> sizeObj;
        printf("size:%d", sizeObj.getSize());
    }
    

    tangoal公司

    1 回复  |  直到 7 年前
        1
  •  2
  •   Curious    8 年前

    :: )从类范围内获取内容(例如 size 静态变量),因此替换 return K.size return K::size

    同时将方法标记为 constexpr