1

関数から構造体へのポインタを返そうとしています。

dbentry* FileReader::parseTrack(int32_t size, char *buffer) {
  dbentry* track;
  int cursor = 0;
  //parse relevant parts
  track.title = this->getFieldForMarker(cursor, size, "tsng" , buffer);
  return track;
}

タイトルの設定は明らかに機能していませんが、どうすればよいかわかりません。また、ポインタから値を読み取る方法もわかりません。キャストを試みましたが、何も機能していないようです。ほとんどの場合、方法がわかりませんでした。適用するか、C用でした。

4

1 に答える 1

4

構造メモリを割り当てていないため、アクセスしてメモリアドレスを返していません。次のようなものが必要です。

dbentry* FileReader::parseTrack(int32_t size, char *buffer)
{
    dbentry* track = new dbentry;
    int cursor = 0;
    //parse relevant parts
    track->title = this->getFieldForMarker(cursor, size, "tsng" , buffer);
    return track;
}

構造体ポインターを返す必要があるため、ポインターをその戻り値で逆参照したくないので、return track;代わりに を使用することに注意してくださいreturn *track;

これは、track が既にポインターであるためです。元のソリューションでは、ポインターのポインターを返します。

したがって、次のように関数を使用します。

dbentry* test = something->parseTrack(size, buffer);
std::cout << test->title;
delete test;
于 2012-10-08T04:43:10.527 に答える