39

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

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++ で一時的な構造体を値で渡す簡単な方法は?

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

4

4 に答える 4

118

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

bool data(struct *sampleData)

引数に名前がないため、機能しない可能性があります。実際にアクセスする関数の引数を宣言するときは、名前が必要です。したがって、次のように変更します。

bool data(struct sampleData *samples)

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

bool data(sampleData *samples)

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

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

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

最後に、 type の変数を作成する必要があります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);
}
于 2013-03-03T02:27:23.050 に答える
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++ っぽい方法があるかもしれません。

于 2013-03-03T02:21:47.510 に答える