我需要返回枚舉陣列的方法的數組,我想:函數返回枚舉
note_name *AppSettings::getNoteMap(){
note_name notes[] = {..}
}
我上,這樣我應該返回的第一個元素的地址讀某處數組,所以這就是爲什麼有一個指針。這雖然給我一個警告:address of stack memory associated with local variable notes returned
如何擺脫警告並正確返回數組?
我需要返回枚舉陣列的方法的數組,我想:函數返回枚舉
note_name *AppSettings::getNoteMap(){
note_name notes[] = {..}
}
我上,這樣我應該返回的第一個元素的地址讀某處數組,所以這就是爲什麼有一個指針。這雖然給我一個警告:address of stack memory associated with local variable notes returned
如何擺脫警告並正確返回數組?
您不能從函數period中返回數組。你可以返回一個指向動態分配的內存塊的指針(我不會去這條路徑),或者把指針(和大小一起)作爲輸出參數,或者返回一個指向靜態數組的指針,或者返回一個vector<T>
或其他收藏品。我想用std::vector
或std::array
。
std::vector<note_name> foo() {
std::vector<note_name> ret;
// populate 'ret'
return ret;
}
使用std::vector
,std::array
,其他一些收集或dynamic-array
(即使用new
,而不是分配堆棧),因爲從職能範圍的退出後您的陣列將一些垃圾被破壞,你將有指針,它指向記憶。我認爲你知道enum
中有多少個值,如果你有C++ 11,你可以使用std::array
。
std::array<note_name> foo() {
std::array<note_name, size> ret = { ... }; // fill ret, instead of ...
return ret;
}
讓我們來看看你寫的:
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
代替。
如果我想返回它,矢量是否也需要是靜態的? – networkprofile
如果您按價值歸還它,您應該這樣做。 –
可能的重複[可以訪問本地變量的內存超出其範圍?](http://stackoverflow.com/questions/6441218/can-a-local-variables-memory-be-accessed-outside-its-範圍) –