構造体のメンバー関数を設定できるように、構造体を(参照によって)関数に渡す方法を理解するのに苦労しています。これまでのところ、私は書いています:
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++で値によって一時的な構造体を渡す簡単な方法?
誰かが私を助けてくれることを願っています。
まず、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);
}
参照によって関数に構造体を渡す:単に:)
#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);
}
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 ++風の方法があるかもしれません。