1

我有一个关于 C++ 类和实例化的问题。以下代码的输出如下:

用于快速参考的 Poco 库:http: //pocoproject.org/docs/

这是一个测试
退出

我希望输出为:

这是一个测试
用户名
EXITING

基本上,为什么 myCreds 没有打印出来?代码:

#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

4

4 回答 4

2

您有 的两个实例myCreds:一个属于thisTest,另一个在 的构造函数的主体中创建和销毁myTest

您应该为 myCreds 编写构造函数,如下所示(myCreds正确初始化成员):

myTest::myTest()
    : test("this is a test")
    , myCreds("username", "password")
{
}
于 2013-03-01T00:17:19.970 回答
1

您在类构造函数中将 myCreds 声明为局部变量,覆盖类中的公共变量。当您的构造函数返回时,局部变量会消失。

于 2013-03-01T00:16:36.247 回答
0

您的构造函数正在创建自己的myCreds而不是初始化成员变量。

于 2013-03-01T00:16:20.873 回答
0

看起来您正在重新创建一个本地实例,HTTPBasicCredentials而不是在这里初始化您的公共成员:

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

该构造函数中的 myCreds 实例将在构造完成时创建并丢弃。

而是初始化您的公共成员。

于 2013-03-01T00:16:31.707 回答