2016-11-14 86 views
1

這裏是我在類SuffixArray功能:無效使用非靜態成員函數的

int pstrcmp(const void *a, const void *b) { 

return strcmp((const char *)*(char **)a, (const char *)*(char **)b); 
} 

我用的qsort該比較功能:

qsort(ap, len1+len2, sizeof(char *),pstrcmp); 

哪個AP是一個指針數組的後綴

當我編譯它時,出現一個錯誤: 非法使用非靜態成員函數

我用記事本++編譯它,它提供了

error: cannot convert 'SuffixArray::pstrcmp' from type 'int (SuffixArray::)(const void*, const void*)' to type 'int (*)(const void*, const void*)' 
qsort(ap, len1+len2, sizeof(char *),pstrcmp); 

有任何人能幫助我嗎?

+0

您使用C++標記標記了此標記。如果這是C++,那麼避免C風格的轉換,使用C++轉換來使你的意圖更清晰。我不喜歡你在看似不合時宜的表演中應用你的論點的方式。 – Dai

+0

@Dai OP用C標記它,我爲C++重新標記,因爲它顯然不是C問題。 – dasblinkenlight

回答

2

在C++中,由於調用非靜態成員函數的約定需要傳遞一個實例,因此需要將一個獨立函數或靜態成員函數(而不是非靜態成員函數)傳遞給qsort

有兩種解決這個問題:

  • 移動的pstrcmp申報了SuffixArray類的,或
  • 聲明pstrcmp在類的靜態。
+0

非常感謝,它的工作原理! – Susan

相關問題