2

私は C++ を初めて使用し、C++ のクラスについて頭を悩ませようとしています。最近、このプログラムを試してみたところ、整数 9 を返す代わりに、ガベージ値が返されました。誰か助けてくれませんか

#include <iostream>
#include <cstring>
#include <math.h>
using namespace std;
class abc;
class xyz
{
    int a;
public:
    friend int add(xyz, abc);
    friend void setval(xyz, int, abc, int);


};
class abc
{
    int b;
public:
    friend int add(xyz, abc);
    friend void setval(xyz, int, abc, int);
};

int add(xyz V1, abc V2)
{ return (V1.a + V2.b);}
void setval(xyz v1, int v11, abc v2, int v22)
{v1.a = v11; v2.b = v22; }

int main()
{
    xyz A;
    abc B;
    setval(A, 4, B, 5);
    cout<<add(A, B)<<endl;
    return(0);
}
4

2 に答える 2

3

setvalこれは、渡したオブジェクトのコピーを変更する値によって関数に引数を渡しているために発生しています。

代わりに次の署名を使用してください。

void setval(xyz& v1, int v11, abc& v2, int v22);

このようにして、メモリのいくつかの個別のブロブで作成されたオブジェクトのコピーではなく、オブジェクトへの参照を送信します。したがって、メイン関数で作成されたオブジェクトに値が割り当てられます。

于 2013-07-20T14:56:29.973 に答える
1
friend void setval(xyz, int, abc, int);

set 関数は、渡されたオブジェクトではなく、渡されたオブジェクトのコピーに値を設定します。参照渡しする必要があります。

friend void setval(xyz &, int, abc &, int);
                   ^^^^^^      ^^^^^^ 

良い本から始めることをお勧めします:
The Definitive C++ Book Guide and List

于 2013-07-20T14:56:19.900 に答える