gpt4 book ai didi

c++ - 没有匹配的调用函数,使用函数指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:05 25 4
gpt4 key购买 nike

#include <TestAssert.h>

...

if (TestAssert::Equals(10, "x", 10, "y", 10, f_TestFailedMsg, v_TCResult,
s_TestCaseCtrl)) { return; }

f_TestFailedMsg 的声明(在基类中):

void A_AbstractTestStub_Actor::f_TestFailedMsg( const char * 
apc_FormatString, ... )
{

部分 TestAssert.h(Test_failed_callback_function 和 Equals 的定义):

typedef void (*Test_failed_callback_function)(T_String);

static bool Equals( int lineNumber, T_String valueText, int value, T_String
expectedText, int expected, Test_failed_callback_function testFailedMsg,
bool & tcResult, P_testCaseCtrl::Base & testCaseCtrl );

Equals 的实现(TestAssert.cpp):

bool TestAssert::Equals( int lineNumber, T_String valueText, int value, 
T_String expectedText, int expected, Test_failed_callback_function
testFailedMsg, bool & tcResult, P_testCaseCtrl::Base & testCaseCtrl )
{
...

我得到错误:

no matching function for call to 'TestAssert::Equals(int const char [29], 
int&, const char[4], int, <unresolved overloaded function type>, bool&,
P_testCaseCtrl::Base&)
Tester.cpp:181:89: note: candidate is:
../TestAssert.h:30:17: note: static bool TestAssert::Equals(int, T_String,
int, T_String, int, Test_failed_callback_function, bool&,
P_testCaseCtrl::Base&)

../TestAssert.h:30:17: note: no known conversion for argument 6
from '<unresolved overloaded function type>'
to 'Test_failed_callback_function {aka void (*)(std::basic_string<char>)}'

如何解决这个错误?

最佳答案

f_TestFailedMsg是一个非静态成员函数;它需要一个 A_AbstractTestStub_Actor 类型的对象被召见。它不能绑定(bind)到 void (*)(T_String) .

有几种方法可以解决这个问题。如果f_TestFailedMsg不应该需要对象,将其设为静态。

如果您想提供成员函数作为参数并获得一个对象以便稍后调用它,您可以更改 Test_failed_callback_function成为成员函数指针:

typedef void (A_AbstractTestStub_Actor::*Test_failed_callback_function)(T_String)

显然这会将函数限制为成为 A_AbstractTestStub_Actor 的成员, 但你可以做一些模板魔术来接受其他类型的成员。

如果您可以使用 C++11,最具表现力的选择是制作 Test_failed_callback_function一个std::function<void(T_String)> , 然后用 lambda 或 std::bind 绑定(bind)一个对象:

if (TestAssert::Equals(10, "x", 10, "y", 10, 
[&my_obj](T_String s){my_obj.f_TestFailedMsg(s);},
v_TCResult, s_TestCaseCtrl))
{ return; }

关于c++ - 没有匹配的调用函数,使用函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32090741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com