在语句中创建 COM 智能指针时出现错误 C2275 "if"
Error C2275 while creating a COM smart-pointer within "if" statement
为什么我不能
if (IUnknownPtr p = anotherComPtr) {} //error C2275: 'IUnknownPtr' : illegal use of this type as an expression
而我可以
if (int* a = anotherPointer) {}
IUnknownPtr
是通过_COM_SMARTPTR_TYPEDEF(IUnknown, __uuidof(IUnknown))
定义的(就像我使用的任何其他智能指针一样)
如何在if
语句中创建com smartptr并验证它是否有效?非常感谢。
我使用VS 2008
p.s.这不是关于它是否是一种好的编码方式,而是关于error C2275
。
我无法在下面的小程序中重现您在vs2008中的编译器错误。在您的包含文件、预处理器定义或编译器选项中可能有一些不同的东西,这会给您带来不同的行为。
你能在if语句外声明一个IUnknownPtr类型的简单变量吗?
你能用下面的代码创建一个没有错误的新项目吗?
以下任一项编译正常吗?
if (NULL == (IUnknownPtr ptr = someOtherPtr)) {
}
IUnknownPtr foo;
bool b(foo);
该错误表明编译器可以看到IUnknownPtr的定义,但不能将IUnknowdPtr的赋值结果解释为布尔。
operator=应返回IUnknownPtr&(已指定给的对象)_com_ptr_t定义运算符布尔()。您的_COM_SMARTPTR_TYPEDEF是否生成对_COM_ptr_t或其他类型的引用?您可以通过临时转储预处理器输出(属性/C++/预处理器/预处理到文件)来轻松找到
#include <comdef.h>
int main(int argc, char* argv[])
{
IUnknownPtr foo;
IUnknown* foo2 = NULL;
if (IUnknownPtr foo3 = foo) {
// do something
}
if (IUnknownPtr foo4 = foo2) {
// do something
}
return 0;
}
我记得MSDEV在if语句中声明变量时没有遵循C++规范(或者可能是for循环?)。
它本应该在括号的末尾被销毁,但事实并非如此。
这可能是一种倒退——你试过梳理MSDN档案吗?这似乎更像是一种怪癖,而不是故意的行为,除非(正如另一位海报所评论的)你误解了正在发生的事情。
你能发布实际的代码,并完成周围的功能吗?
由于这对我来说在VS 2010上编译得很好,我想你可能没有#include <comdef.h>
和/或#include <comdefsp.h>
。
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- 错误 C2275 RHandle:非法使用此类型作为表达式
- 编译器错误C2275
- 在语句中创建 COM 智能指针时出现错误 C2275 "if"
- 奇怪的错误 C2275 ..非法使用此类型作为成员函数模板和 lambda 的表达式