0
我試着這樣做:宏返回值不匹配函數類型
if (foo)
return SET_ERROR_AND_RETURN_NULL(ERROR_HERE);
使用
...
#define SET_ERROR_AND_RETURN_NULL(error)
lastError = error; \
return nullptr; \
這樣,以後我可以...
if (GetMyLastError() == ERROR_HERE) { foo }
不過,我得到"Return value type does not match the function type."
只是定義SET_ERROR_AND_RETURN_NU當然,LL作爲nullptr的作品,所以我猜它必須處理類型如何與宏一起工作?
也許我不應該使用宏來做這個,但我受到了windows系統錯誤代碼的啓發。如果這是一個壞主意,我想了解爲什麼函數調用會更好。
我也試圖這樣做,因爲我希望保持if語句返回一行,而不需要在那裏設置lastError
。
啊,說得通。發生這樣的事情正在發生,但我希望我仍然可以做到這一點。它是靜態函數。謝謝! – Stradigos
看起來我可以使用「返回SET_ERROR_AND_RETURN_NULL(ERROR_HERE)」,儘管它現在是一個static void *類型的函數,並返回nullptr,因爲我調用的函數有其他類型的返回類型。換句話說,我的錯誤函數的void * return類型與我試圖使用它的函數不兼容,即使它正在返回nullptr,就像我可以正常使用而不使用它一樣。 – Stradigos
這是因爲'void *'不能在C++中的另一個'T *'中被隱式轉換。最好的解決辦法是有像'template T * SET_ERROR_AND_RETURN_NULL(ERROR_HERE){lastError = ERROR_HERE;返回nullptr; }'這樣你就可以在任何時候擁有它,例如'return SET_ERROR_AND_RETURN_NULL (ERROR_HERE)' –
Jack