2013-03-01 95 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声明为您的类构造函数中的局部变量,以覆盖类中的公共变量。局部变量在构造函数返回时消失。