Windows MSVC 編譯通過,Linux GCC 5.2 報錯:模板函數 `getReadOnlyData` 調用 `getData` 時提示未聲明。
GCC **兩階段查找**:模板定義階段只查找**非依賴名稱**;`getData` 依賴模板參數 `T`,屬於**依賴名稱**,延遲到實例化階段查找。但實例化時若 `getData` 宣告在模板**之後**,GCC 找不到。
將 `getData` 所有重載**聲明前置**於模板函數之前:
// 先聲明所有 getData 重載
PyObject * getData( const bool data );
PyObject * getData( const int data );
PyObject * getData( const uint data );
// ...
template <class T>
PyObject * getReadOnlyData( const T & d ) {
return getData( d ); // 此處可見前置聲明
}
或在類內前置聲明(若為類成員),或使用 `this->getData(d)` 強制依賴查找(僅限成員函數)。
**習慣先聲明後定義**,或在頭文件中將所有依賴名稱前置聲明,確保 GCC/Clang/MSVC 一致通過。