вызвать функцию-член в c ++ - PullRequest
       9

вызвать функцию-член в c ++

0 голосов
/ 02 октября 2009
    class scanner
    {
        private:
            string mRootFilePath;
            static int  AddToIndex( const char *,const struct stat *,int);  
        public:

            scanner(string aRootFilePath){
            mRootFilePath = aRootFilePath;
            }       

            string GetFilepath(){
                return mRootFilePath;
            }
            void Start();
    };


    int  scanner :: AddToIndex(const char *fpath, const struct stat *sb,int typeflag)
    {

        fprintf(stderr,"\n%s\t%d",fpath,typeflag);
        return 0;
    }

    void scanner :: Start()
    {
        ftw(mRootFilePath.c_str,(int (*)( const char *,const struct stat *,int))scanner :: AddToIndex,200);
    }


main()
{

int i;
scanner test(".");
test.Start();


}

Когда я компилирую этот код, я получаю сообщение об ошибке

 main.c: In member function ‘void scanner::Start()’:
main.c:34: error: argument of type ‘const char* (std::basic_string<char, std::char_traits<char>, std::allocator<char> >::)()const’ does not match ‘const char*’

Функция ftw вызывает функцию обратного вызова в этом случае функцию AddToIndex (), которая является функцией-членом класса «сканер». Как сделать эту функцию-член AddToIndex функцией обратного вызова? И как решить эту проблему ...

Ответы [ 2 ]

4 голосов
/ 02 октября 2009

При вызове ftw первый параметр - mRootFilePath.c_str. Возможно, вы хотите mRootFilePath.c_str() вместо?

1 голос
/ 02 октября 2009

Помимо ответа Манагу, не забудьте убедиться, что ваша функция-член static использует связь C (extern "C") - в зависимости от реализации вы не сможете передать указатель на функцию с стандартная связь C ++, где ожидается указатель на функцию C (когда ABI отличаются).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...