C++ 这个参数是什么';A类';你在干什么?

C++ 这个参数是什么';A类';你在干什么?,c++,embedded-linux,C++,Embedded Linux,我有一个类定义为b.h class A{ public: void (B ::*writeBlock) (); }; 其他B类定义为 class B{ public: A obj; }; 在B.cpp中使用B类的此参数 (this->*obj.writeBlock)(); 请为writeBlock提供上述调用的定义。您的问题不太清楚,但我仍能理解: B由一个对象组成,对象的函数指针writeBlock未初始化。此外,您试图在通过未初始化指针进行调

我有一个类定义为
b.h

class A{ 
public:
   void       (B ::*writeBlock)    ();
};
其他
B类
定义为

class B{
public:
      A obj;
};
B.cpp
中使用B类
的此参数

(this->*obj.writeBlock)();
请为
writeBlock

提供上述调用的定义。您的问题不太清楚,但我仍能理解:

B由一个对象组成,对象的函数指针
writeBlock
未初始化。此外,您试图在通过未初始化指针进行调用时取消对该指针的引用,这是错误的

因此,首先将
writeBlock
初始化为类
B
的成员函数,然后尝试取消引用它


B::*
表示类
B
的成员函数。因此,
this->*obj.writeBlock
必须解析为B的一个成员函数。

如果您指的是它的用途和可能的用途,那么这是一种让
B
的不同实例具有不同行为的方法,这取决于它们的
obj
writeBlock
成员初始化的对象

A
将类
B
的成员函数的地址存储为成员,以供以后使用。这就是
writeBlock
的含义:它是一个

writeBlock
必须在某个地方进行初始化,以指向
B
的成员函数,在这种情况下,该函数接受零参数并返回void

可能的情况如下:

class B
{
public:
    A obj;

    void DoWork()
    {
        (this->*obj.writeBlock)();
    }

    void Task1() { std::cout << "1"; };
    void Task2() { std::cout << "2"; };
};


B b1, b2;
b1.obj.writeBlock = &B::Task1;
b2.obj.writeBlock = &B::Task2;

b1.DoWork(); // prints 1
b2.DoWork(); // prints 2
B类
{
公众:
obj;
无效销钉()
{
(此->*对象写块)();
}

void Task1(){std::cout请提供。这可能无法编译。B::writeBlock的可能副本是一个成员函数指针。我不明白你在问什么。你所说的“上述调用的定义”是什么意思?可能的调用是什么。