【问题标题】:Problem with function pointer not "grabbing?" parameters [duplicate]函数指针没有“抓取”的问题?参数 [重复]
【发布时间】:2025-11-25 01:55:01
【问题描述】:

我创建了一个指向函数 initDrop(unsigned int) 的指针,但在 Visual Studio C2064 中出现错误,指出“术语不计算为采用 1 个参数的函数”。

这是头文件的重要部分


namespace noise
{
    namespace module
    {
        class ErosionModule : public Module
        {
        public:

            void iterate(unsigned int iterations, unsigned int strength);

        protected:

            void initDrop(unsigned int iterations);
        };

        class Raindrop : public ErosionModule
        {
        public:

            void calculate();

        };
    }
}

下面是失败的 cpp 文件的重要部分,错误行位于对 funcRef(1000) 的调用中。

namespace noise
{
    namespace module
    {
        void ErosionModule::initDrop(unsigned int iterations)
        {
            for (int i = 0; i < iterations; i++)
            {
                Raindrop drop;
                drop.calculate();
            }
        }

        void ErosionModule::iterate(unsigned int iterations, unsigned int strength)
        {
            auto funcRef = &noise::module::ErosionModule::initDrop;

            funcRef(1000);
        }
    }
}

非常感谢您的帮助

【问题讨论】:

  • 使用指向类的成员函数的指针调用函数的语法与使用指向非成员函数的指针调用函数的语法不同。我敢肯定这已经在 SO 之前被问过。
  • 这只是微软的又一个骗局。一个明智的编译器会给出一个有用的错误信息,例如(gcc compiler):“error: must use '.*' or '->*' to call pointer-to-member function in 'funcRef (...)', eg '(... ->* funcRef) (...)' ".

标签: c++ pointers function-pointers member-function-pointers


【解决方案1】:

funcRef是成员指针,使用:(this-&gt;*funcRef)(1000);

【讨论】: