web-dev-qa-db-ja.com

構造体を関数に渡す

構造体のメンバー関数を設定できるように、構造体を(参照によって)関数に渡す方法を理解するのに苦労しています。これまでのところ、私は書いています:

bool data(struct *sampleData)
{

}

int main(int argc, char *argv[]) {

      struct sampleData {

        int N;
        int M;
        string sample_name;
        string speaker;
     };
         data(sampleData);

}

私が得るエラーは次のとおりです:

C++では、すべての宣言に型指定子が必要ですbool data(const&testStruct)

ここで説明するいくつかの例を試しました: C++で値によって一時的な構造体を渡す簡単な方法?

誰かが私を助けてくれることを願っています。

29
Phorce

まず、data()関数の署名:

bool data(struct *sampleData)

引数に名前がないため、おそらく動作しません。実際にアクセスしたい関数の引数を宣言する場合、名前が必要です。次のように変更します。

bool data(struct sampleData *samples)

しかし、C++では、structを実際に使用する必要はまったくありません。したがって、これは単純に次のようになります。

bool data(sampleData *samples)

第二に、sampleData構造体は、その時点でdata()に認識されていません。したがって、その前に宣言する必要があります。

struct sampleData {
    int N;
    int M;
    string sample_name;
    string speaker;
};

bool data(sampleData *samples)
{
    samples->N = 10;
    samples->M = 20;
    // etc.
}

そして最後に、sampleData型の変数を作成する必要があります。たとえば、main()関数では:

int main(int argc, char *argv[]) {
    sampleData samples;
    data(&samples);
}

変数のポインターを受け入れるため、変数のアドレスをdata()関数に渡す必要があることに注意してください。

ただし、C++では引数を参照によって直接渡すことができ、ポインターで「エミュレート」する必要はありません。代わりにこれを行うことができます:

// Note that the argument is taken by reference (the "&" in front
// of the argument name.)
bool data(sampleData &samples)
{
    samples.N = 10;
    samples.M = 20;
    // etc.
}

int main(int argc, char *argv[]) {
    sampleData samples;

    // No need to pass a pointer here, since data() takes the
    // passed argument by reference.
    data(samples);
}
89
Nikos C.

参照によって関数に構造体を渡す:単に:)

#define maxn 1000

struct solotion
{
    int sol[maxn];
    int arry_h[maxn];
    int cat[maxn];
    int scor[maxn];

};

void inser(solotion &come){
    come.sol[0]=2;
}

void initial(solotion &come){
    for(int i=0;i<maxn;i++)
        come.sol[i]=0;
}

int main()
{
    solotion sol1;
    inser(sol1);
    solotion sol2;
    initial(sol2);
}
1
bool data(sampleData *data)
{
}

使用している構造体のタイプをメソッドに伝える必要があります。この場合、sampleData。

注:この場合、メソッドを認識する前に構造体を定義する必要があります。

例:

struct sampleData
{
   int N;
   int M;
   // ...
};

bool data(struct *sampleData)
{

}

int main(int argc, char *argv[]) {

      sampleData sd;
      data(&sd);

}

注2:私はCの男です。これを行うには、もっとc ++風の方法があるかもしれません。

1
Inisheer