0

まず、コードをペーストビンにアップロードしました。興味のある方は下のリンクをクリックしてください。私が経験している問題は、タイトルが示すとおりですが、ローカル文字列変数を関数からグローバル変数オブジェクトに渡す方法の問題です。何時間にもわたるオンライン検索からの私の解決策は、参照渡しによるパスです。これは問題ありませんが、実際にそれをコードに適用すると、混乱して多くの時間を費やしました。それは私の最初の問題を要約し、2番目の問題は、関数内で関数を呼び出していないという事実にもかかわらず、何らかの理由で再帰的である作成したコンストラクターに関連しています。そのエラーは完全にループに陥っています (しゃれた意図はありません)。関係なく、

http://pastebin.com/Mm1K4d2t

4

2 に答える 2

2

これは再帰コンストラクタです

Date::Date()
{
    Date Date;
    Date.year=0;
    Date.day=0;
    Date.month="";
}

コンストラクターは、オブジェクトを構築するときに呼び出されます。このコンストラクターで最初に行うことは何ですか? オブジェクトを構築してください!したがって、再帰。あなたが書きたかったのは、

Date::Date()
{
    year=0;
    day=0;
    month="";
}

他にも同様のエラーがいくつかありましたが、これらはすべて、メンバー変数のしくみの誤解に関連しているようです。たとえば、これ

    static string Date::getMonth();

これであるべき

    string getMonth();

この

string Date::getMonth()
{
        Date Date;
        return Date.month;
}

これであるべき

string Date::getMonth()
{
        return month;
}

setMonth にも同様の変更が必要です。

残念ながら、グローバル オブジェクトとローカル オブジェクトに関するあなたの質問は理解できませんが、あなたの誤解を考えると、それは偽物であると確信しています。上記の (および setMonth に) 変更を加えてから、現在の位置を確認してください。C++ の本でオブジェクトに関する適切な章を読み直すのも良い考えです。

于 2013-03-25T08:27:58.507 に答える
0

あなたが例えば書くとき

return Date.month;

オブジェクトではなく、クラスで直接monthメンバーにアクセスしようとしています。メンバーはクラスで宣言されていますが、オブジェクトに存在するため、これは機能しません。

また、現在のオブジェクトのメンバーにアクセスする場合は、プレフィックスを付ける必要はありません。使用するだけです。

return month;
于 2013-03-25T08:36:17.593 に答える