2013-03-01 96 views
1

我有一個關於C++類和實例的問題。下面的代碼的輸出如下:實例化一類庫對象?

波科庫快速參考:http://pocoproject.org/docs/

這是一個測試
EXITING

我所要的輸出是:

這是一個測試
用戶名
退出

基本上,爲什麼不是myCr編輯打印出來? 代碼:

#include <iostream> 
#include <string> 
#include <Poco/Net/HTTPBasicCredentials.h> 

using namespace std; 

class myTest{ 
public: 
    string test; 
    Poco::Net::HTTPBasicCredentials myCreds; 
    myTest(); 
}; 

myTest::myTest(){ 
    test = "this is a test"; 
    Poco::Net::HTTPBasicCredentials myCreds("username", "password"); 
} 

int main(){ 
    myTest thisTest; 
    cout << thisTest.test << "\n"; 
    cout << thisTest.myCreds.getUsername() << "\n"; 
    cout << "EXITING" << "\n"; 
} 

感謝您的幫助。
R

回答

2

您有兩個myCreds的實例:一個屬於thisTest,另一個在myTest的構造函數的主體中創建並銷燬。

你應該寫爲myCreds構造爲folows(正確innitialize成員myCreds):

myTest::myTest() 
    : test("this is a test") 
    , myCreds("username", "password") 
{ 
} 
+0

完美工作,感謝。 – boulderprog 2013-03-01 06:17:27

0

您的構造函數創建自己的myCreds而不是初始化成員變量。

0

看起來你正在重新創建的HTTPBasicCredentials本地實例,而不是在這裏初始化你的公共成員:

myTest::myTest(){ 
    test = "this is a test"; 
    Poco::Net::HTTPBasicCredentials myCreds("username", "password"); 
} 

該構造內的myCreds實例將被創建並扔掉建設完成時。

改爲初始化您的公共成員。

+0

感謝您的解釋,這一切纔有意義,現在 – boulderprog 2013-03-01 06:21:36

1

您正在將myCreds聲明爲您的類構造函數中的局部變量,以覆蓋類中的公共變量。局部變量在構造函數返回時消失。