1

最近、大学の授業で C++ を使わなければなりません。私はポインターと参照の概念を認識していますが、特定の点で謙虚です。

次のクラス定義を検討してください。

class test{
    public:
        test(int i);
        ~test();
        int* getint();
    private:
        int *asdf;
};

test::test(int i){
     asdf = new int();
    *asdf = i;
}

int* test::getint(){
    return asdf;
}

および次のコード:

void fun1(int*& i){
    *i +=1;
}

int main(){
    test *a = new test(1);
    fun1(a->getint());
}

g++ でコンパイルすると、エラー メッセージが表示されます。

error: invalid initialization of non-const reference of type ‘int*&’ from an rvalue of type ‘int*’

問題がどこにあるのか、次のように新しいポインターを宣言することで解決できることがわかりました。

int main(){
    test *a = new test(1);
    int* b = a->getint();
    fun1(b);
}

しかし、戻り値を参照として直接使用する他の方法はありますか? 私の C++ コードがひどい場合は、修正してください (基本的には C++ の最初の週です)。

編集: 参照を使用するように fun1 を変更し、クラス変数の初期化を修正しました (enrico.bacis で提案されているように)

4

2 に答える 2

3

インスタンス変数をシャドウするクラス テストのコンストラクターで新しいasdf変数を定義しています。

行を変更します。

int* asdf = new int();

と:

asdf = new int();
于 2012-10-31T17:57:20.750 に答える
1

C++ ではメモリを適切に管理する必要があり、後で削除を行わずに常に new を呼び出すことはできないため、いくつかの問題があります。

こう思う

void fun1(int* i)
{
  *i +=1;
} 

+=1 に * よりも高い演算子の優先順位を与えるため、次のようにする必要があります。

void fun1(int* i)
{
  (*i) +=1;
} 

int*関数はパラメータとして notを取る必要があることに注意してくださいint *&int *&ポインターが指すものではなく、ポインター自体を変更する場合にのみ使用します。そのような場合、戻り値を渡すことができずgetint()、コンパイラ エラーが発生しているように見えます。

于 2012-10-31T18:00:39.897 に答える