gpt4 book ai didi

c++ - 直接包装到 C++ 类中的函数

转载 作者:太空宇宙 更新时间:2023-11-04 13:04:08 25 4
gpt4 key购买 nike

我正在尝试创建一个可以作为类成员调用的函数。这是一些代码:

#include <iostream>
using namespace std;

class CTest;
void CTestSum(CTest* ptr, int a, int b);

class CTest{
public:
int i;
void sum(int a, int b);
CTest() : i(0), sum(CTestSum)
{
}
};

void CTestSum(CTest* ptr, int a, int b)
{
++ptr->i;
cout << (ptr->i)+a+b << endl;
}

int main() {
CTest instance;
instance.sum(2, 4);

return 0;
}

最终,函数将在 dll 或库中结束。另见 http://ideone.com/csueum编译失败,出现以下错误消息:

prog.cpp: In constructor 'CTest::CTest()':
prog.cpp:12:18: error: class 'CTest' does not have any field named 'sum'
CTest() : i(0), sum(CTestSum)

我做错了什么?

最佳答案

sum 不是该类的数据成员,因此您不能在构造函数的成员初始化列表中对其进行初始化。不需要初始化sum(),只需给它一个根据需要调用真正函数的body,eg:

#include <iostream>

using namespace std;

class CTest;
void CTestSum(CTest* ptr, int a, int b);

class CTest{
public:
int i;
void sum(int a, int b) { CTestSum(this, a, b); }
CTest() : i(0)
{
}
};

void CTestSum(CTest* ptr, int a, int b)
{
++ptr->i;
cout << (ptr->i)+a+b << endl;
}

int main() {
CTest instance;
instance.sum(2, 4);

return 0;
}

然后,您的 DLL 可以根据需要实现和导出 CTestSum() 函数,并且您的 CTest 类可以是仅 header 实现,以便在不同编译器之间实现更好的可移植性。

关于c++ - 直接包装到 C++ 类中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33177659/

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