调用模板 class 成员时非法使用此类型作为表达式
Illegal use of this type as an expression when calling template class member
我在使用 class SizeObj
的静态 class 成员 size
时遇到问题,它用作模板 [=] 的模板参数43=]SizeTemplate
。请参阅下面的代码片段,我已将其减少到最低限度。
事实上 运行 下面的代码可以达到 MS VS2008,但现在编译失败
用VS2010编译时。显示以下错误消息:
error C2275: 'K' : illegal use of this type as an expression
error C2228: left of '.size' must have class/struct/union
需要说明的是,如果getSize
方法是编译失败
至少调用一次。
请不要问下面代码的意义,正如我说的那样,我将它简化为
必要的最低解释。然而,我必须承认
由于多种原因,成员 'size' 的用法不是很优雅,也许
有很多更好的解决方案,但目前,我别无选择
保持这样。
你知道这里可能出了什么问题吗?是否可以通过构建来解决
设置或类似的东西?我还没找到合适的。
在下面的帖子中很容易,因为 class K 的实例可用,但对于我的问题,我不知道如何正确获取该实例:
- Simple templated function to convert std::vectors - "illegal use of this type as an expression"
//myTemplate.h</p>
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());
}
非常感谢您!
探戈
与 Java 不同,在 C++ 中,您不能在 classes 上使用点运算符,您需要使用范围解析运算符(即 ::
)从 class 范围(例如 size
静态变量),因此将 return K.size
替换为 return K::size
同时将方法标记为 constexpr
可能会有所帮助。
我在使用 class SizeObj
的静态 class 成员 size
时遇到问题,它用作模板 [=] 的模板参数43=]SizeTemplate
。请参阅下面的代码片段,我已将其减少到最低限度。
事实上 运行 下面的代码可以达到 MS VS2008,但现在编译失败 用VS2010编译时。显示以下错误消息:
error C2275: 'K' : illegal use of this type as an expression
error C2228: left of '.size' must have class/struct/union
需要说明的是,如果getSize
方法是编译失败
至少调用一次。
请不要问下面代码的意义,正如我说的那样,我将它简化为 必要的最低解释。然而,我必须承认 由于多种原因,成员 'size' 的用法不是很优雅,也许 有很多更好的解决方案,但目前,我别无选择 保持这样。
你知道这里可能出了什么问题吗?是否可以通过构建来解决 设置或类似的东西?我还没找到合适的。
在下面的帖子中很容易,因为 class K 的实例可用,但对于我的问题,我不知道如何正确获取该实例:
- Simple templated function to convert std::vectors - "illegal use of this type as an expression"
//myTemplate.h</p>
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());
}
非常感谢您!
探戈
与 Java 不同,在 C++ 中,您不能在 classes 上使用点运算符,您需要使用范围解析运算符(即 ::
)从 class 范围(例如 size
静态变量),因此将 return K.size
替换为 return K::size
同时将方法标记为 constexpr
可能会有所帮助。