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

の 2 つのインスタンスがありmyCredsます。1 つは に属しthisTest、もう 1 つは のコンストラクターの本体で作成および破棄され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 に答える