あなたが書いたものを見てみましょう:
note_name *AppSettings::getNoteMap(){
note_name notes[] = {..}
}
配列notes
は、関数が戻るときに自動的にクリーンアップされるローカル変数です。それへのポインターを返す場合は、存在しなくなった配列へのポインターを返しています。そのため、コンパイラは不平を言っています。
コンパイル時に配列のサイズと内容がわかっている場合は、配列を static const として宣言します。次に、配列への参照を返すことができます。構文は少し奇妙です:
static const std::size_t note_names_size = 42;
note_name const (&AppSettings::getNoteMap())[note_names_size] {
static note_name const notes[note_names_size] = { ... };
return notes;
}
コンパイル時に配列のサイズがわかっているが内容がわからない場合は、std::array
. ローカル変数を宣言して入力し、値で返すことができます。
配列のサイズと内容がコンパイル時に不明std::array
な場合 (またはライブラリが を実装していない場合) は、std::vector
代わりに a を使用してください。