C++ 将COM智能指针定义为头文件中的成员?

C++ 将COM智能指针定义为头文件中的成员?,c++,com,header-files,smart-pointers,class-members,C++,Com,Header Files,Smart Pointers,Class Members,我想知道如何将头文件中的COM智能指针定义为类成员?以下是我们所做的: 在.cpp文件中,我有: long MyClass:MyFun(long &deviceCount) { RESULT h = CoInitialize(NULL); MyComPtr ptr(__uuidof(MyComClass)); if(deviceCount > 0) ptr->Connect(); } _ptr(__uuidof(MyComClas

我想知道如何将头文件中的COM智能指针定义为类成员?以下是我们所做的:

  • 在.cpp文件中,我有:

    long MyClass:MyFun(long &deviceCount)
    {
        RESULT h = CoInitialize(NULL);
        MyComPtr ptr(__uuidof(MyComClass));
    
        if(deviceCount > 0)
            ptr->Connect();
    }
    
    _ptr(__uuidof(MyComClass));
    
但由于其他函数需要使用ptr,我正在考虑将其更改为类成员,并在头文件中定义它,如下所示:

  • 在.h文件中:

    MyComPtr _ptr;
    
  • 然后在.cpp文件中,我有:

    long MyClass:MyFun(long &deviceCount)
    {
        RESULT h = CoInitialize(NULL);
        MyComPtr ptr(__uuidof(MyComClass));
    
        if(deviceCount > 0)
            ptr->Connect();
    }
    
    _ptr(__uuidof(MyComClass));
    
但是编译没有通过,它说“这个术语不会对一个带1个参数的函数求值”。我很困惑如何才能实现这一点。有什么想法吗?谢谢

编辑:所以要使用initilizer列表,它应该是这样的

MyClass:MyClass() : _ptr(new MyCom)
{
    _ptr(__uuidof(MyComClass));
}

在构造时调用初始值设定项列表来设置变量,否则这些变量将是常量。它通常用于常量变量、引用等。我实际上不知道COM,但如果智能指针具有与引用类似的机制(即,一旦设置,它就无法重定目标),则必须在构造时使用初始值设定项列表对其进行初始化

Constructor() : _Ptr(new MyComObject)
{
 // Other constructor stuff here
}
语法可能是错误的-正如我所说,我不知道COM-但这可能会有所帮助

编辑:

假设您拥有以下类别:

class MyClass
{
public:
    MyClass(); // constructor
    MyComPtr _ptr;
};
然后在.cpp中,按如下方式定义构造函数:

MyClass::MyClass() : _ptr(__uuidof(MyComClass)
{
   // rest of constructor code
}

在构造时调用初始值设定项列表来设置变量,否则这些变量将是常量。它通常用于常量变量、引用等。我实际上不知道COM,但如果智能指针具有与引用类似的机制(即,一旦设置,它就无法重定目标),则必须在构造时使用初始值设定项列表对其进行初始化

Constructor() : _Ptr(new MyComObject)
{
 // Other constructor stuff here
}
语法可能是错误的-正如我所说,我不知道COM-但这可能会有所帮助

编辑:

假设您拥有以下类别:

class MyClass
{
public:
    MyClass(); // constructor
    MyComPtr _ptr;
};
然后在.cpp中,按如下方式定义构造函数:

MyClass::MyClass() : _ptr(__uuidof(MyComClass)
{
   // rest of constructor code
}

你熟悉“初始值设定项列表”这个术语吗?@WhozCraig:不,我不熟悉,但我想学习?你熟悉“初始值设定项列表”这个术语吗?@WhozCraig:不,我不熟悉,但我想学习?你能再添加一点代码吗,尤其是将你的解决方案与我的案例联系起来吗?我很难找出你的代码和我的代码之间的联系。谢谢。那我把MyComClass(MyComClass)放在哪里呢?如果没有看你们的课,我真的不能提供更多的信息。我也不愿意说太多,因为我可能完全错了,但基本上我假设你有这个:最终,正如我之前所说的,我不确定。我只是想回答什么是初始值设定项列表,因为它可能是您正在寻找的解决方案。请您再添加一点代码,特别是将您的解决方案链接到我的案例,好吗?我很难找出你的代码和我的代码之间的联系。谢谢。那我把MyComClass(MyComClass)放在哪里呢?如果没有看你们的课,我真的不能提供更多的信息。我也不愿意说太多,因为我可能完全错了,但基本上我假设你有这个:最终,正如我之前所说的,我不确定。我只是想我应该回答什么是初始值设定项列表,因为它可能是您正在寻找的修复方法。