0

以下は、私が直面している問題の小規模な例です。以下の例では、intポインターを使用していますが、自分のコードでは、実際には別のクラスへのポインターを使用しています。

同じメソッドに複数のポインターを渡すことができる必要があります。また、ポインターごとに特定のメソッドを記述したくありません。もちろん、コードを実行すると、期待した結果が得られません。

問題を絞り込んだと思いますが、どうすれば解決できるかわかりません。C ++のすべては値渡しであるため、私が渡すポインターは参照渡しである必要があります。以下のメソッドで、このように参照によって呼び出すようにメソッドを変更してみました。

int** getIntPointer() {return &p1;} 

void initializeP1(int **&ip,int n)void initializeP1(int **ip,int n)

しかし、何も機能していないようです。

誰かがこれを修正する方法の手がかりを持っていますか?

ありがとうございました

#include <iostream>

using namespace std;

class Test {
  private:
    int *p1;   
    int *p2;
    int sizeP1;
    int sizeP2;   
  public:
    int** getIntPointer() {return &p1;}
    void initializeP1(int **&ip,int n){
        sizeP1=n; 
        *ip=new int[n];

        for(int i=0;i<n;i++)
            *ip[i]=i;         
    }  
    void printP1() {
        for(int i=0;i<sizeP1;i++)
            cout<<p1[i]<<" "; 
    }
};

int main() {
    Test t;
    int** p = t.getIntPointer();
    t.initializeP1(*&p,10);
    t.printP1(); 

    return 0;
}
4

2 に答える 2

5

この行は間違っています:

*ip[i]=i;

演算子は[]演算子よりも優先順位が高い*ため、次の行は次のようになります。

*(ip[i])=i;

代わりにこれを次のように変更する必要があります。

(*ip)[i]=i;
于 2012-10-10T21:25:30.370 に答える
0

また、なぜ関数を呼び出すのにinitializeP1使用するの**ipですか? 好きにする

 void initializeP1(int n){
    sizeP1=n;
    p1=new int[sizeP1];
    for(int i=0;i<sizeP1;i++)
         p1[i]=i;
 }  

そのように最初に配置されていたでしょう(はるかに少ない*'sなど:)

于 2012-10-10T21:44:46.660 に答える