【问题标题】:Typedef method pointer is not recognized as member of original classTypedef 方法指针未被识别为原始类的成员
【发布时间】:2023-01-08 13:45:42
【问题描述】:

我正在尝试创建受 CppUnit 启发的单元测试框架。每个测试套件都是一个单独的类,带有设置方法、拆卸方法,然后是一些单元测试方法。我希望能够遍历单元测试方法,以便我可以在每个方法之前和之后调用设置和拆卸。

这是我开始使用的代码。

// In class TestSuite.hpp
public:
    typedef void (TestSuite::*UnitTest)();
    static std::vector<UnitTest> m_TestList;

    static TestSuite* Instance();
    void setup();
    void teardown();
protected:
    void unitTestOne();
private:
    static TestSuite* m_Instance;
// In main.cpp
int main() {
    for(TestSuite::UnitTest test : TestSuite::m_TestList) {
        TestSuite::Instance()->setup();
        TestSuite::Instance()->test();
        TestSuite::Instance()->teardown();
    }
}

结果出现此错误消息

error C2039: 'test': is not a member of 'TestSuite'

我真的希望,因为类型定义“UnitTest”意味着“TestSuite”的一个方法,它什么都不接受也不返回什么,它会被识别为对 TestSuite::Instance() 的有效调用。任何对我哪里出错的见解都将不胜感激。

【问题讨论】:

  • “我真的希望……”您希望错了,因为该类中没有 test
  • 您可能希望使用 test 而不是 TestSuite::Instance()
  • TestSuite::Instance() 的类型是 TestSuite* 并且在取消引用后你得到一个 TestSuite 对象,它没有 test 成员,正如错误明确指出的那样。

标签: c++ function-pointers pointer-to-member cppunit


【解决方案1】:

任何对我哪里出错的见解都将不胜感激。

TestSuite::Instance() 的类型是 TestSuite* 并且在取消引用此指针后,我们得到一个 TestSuite 对象,它没有 test 成员,如错误所述。

【讨论】:

    【解决方案2】:

    您的测试标识符似乎引用了 TestSuite 类的方法,但该方法在测试标识符中不存在。

    通过使用 UnitTest 类型,您可以使用正确的语法调用方法。在 C++ 中,您可以使用 -> 运算符调用对象的方法,后跟方法名称和任何必要的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-01
      • 1970-01-01
      • 2011-03-04
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 2015-02-13
      • 1970-01-01
      相关资源
      最近更新 更多