2013-05-15 24 views
1

我想知道如何在頭文件中定義一個COM智能指針作爲類成員?這是什麼做的:定義一個COM智能指針作爲頭文件中的成員?

  • 在.cpp文件,我有:

    long MyClass:MyFun(long &deviceCount) 
    { 
        RESULT h = CoInitialize(NULL); 
        MyComPtr ptr(__uuidof(MyComClass)); 
    
        if(deviceCount > 0) 
         ptr->Connect(); 
    } 
    

但由於其它功能需要使用PTR,我想將其更改爲一個類成員和在頭文件中定義它,像這樣:

  • 在.h文件中:

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

    _ptr(__uuidof(MyComClass)); 
    

但編譯沒有通過,它說:「這一術語不計算爲服用1個參數的函數」。我很困惑我如何實現這一點。有任何想法嗎?謝謝。

編輯:所以要使用initilizer列表,它是這樣的東西?

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

你熟悉的名詞*」初始化列表「*? – WhozCraig

+0

@WhozCraig:不,我不是,但我想學習? –

回答

1

初始化器列表在構造時被調用來設置否則會是const的變量。它通常用於const變量,引用等。我實際上並不知道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 
} 
+0

您可以添加一些更多的代碼,特別是將您的解決方案鏈接到我的案例?我很難弄清楚你的代碼和我的代碼之間的聯繫。謝謝。 –

+0

我在哪裏放置__uuidof(MyComClass)的東西? –

+0

沒有看到你的課,我真的不能提供更多的信息。我也不願意說太多,因爲我可能是完全錯誤的,但基本上我假設你有這個: http://pastebin.com/SA8WUgJ0 最終,正如我之前所說,我不知道當然。我只是想,我會回答初始化者名單,因爲它可能是你正在尋找的修復。 –

相關問題