gpt4 book ai didi

c++ - 字符串补偿 : reference to non-static member function must be called

转载 作者:行者123 更新时间:2023-11-28 05:00:08 30 4
gpt4 key购买 nike

我刚从 C 切换到 C++,而 C 中的一切都相当简单(与 C++ 相比)。我将我在 c 中对命令行参数进行排序的程序迁移到 c++(即制作类和东西),现在我在尝试运行它时遇到了这个错误。找不到函数 stringcomp 的引用。任何人都可以帮助如何纠正它?这个问题可能很基础,所以请原谅我对 C++ 的陌生。

PS:Par是我的类(class)名

void Par :: sort()
{

int i;
char *s[size-1];


/* assign each argument to a pointer */
for (i = 1; i < size; i++)
s[i-1] = argNew[i];

qsort (s, size - 1, sizeof *s, stringcomp);//It yeilds an error here


for (i = 1; i < size; i++)
{
argNew[i] = s[i-1];
}

}

void Par :: parse(char **argv, int argc)
{
setArgs(argv, argc);
sortArgs();
}

int Par:: stringcomp (const void *x, const void *y)
{
return strcmp (*(char * const *)x, *(char * const *)y);
}

最佳答案

C++ 中的成员函数很特殊,它们必须从对象的实例中调用。 qsort函数,作为 C 的延续,不知道对象并且不能使用它。

有很多方法可以解决这个问题。第一种是简单地制作 stringcomp不是成员函数。

int stringcomp (const void *x, const void *y)

第二个是让它成为一个static成员函数。静态函数不需要调用对象。

qsort (s, size - 1, sizeof *s, Par::stringcomp);

您还应该考虑使用 std::sort ,这是 C++ 进行排序的方式。您要么需要实现 operator<在您的对象上,或提供与 sort 的比较功能称呼。这个比较函数与你在C语言中使用的比较函数不同,有点超出问题的范围。

关于c++ - 字符串补偿 : reference to non-static member function must be called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46229300/

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