gpt4 book ai didi

c - 在 C 中使用指向结构内部函数的指针

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

只为s & g。我想用 C 构建我自己的库。我想让它遵循 C# 对象概念,并意识到这样做的唯一方法是让基类型使用指向函数的指针作为它们的成员。

好吧,我被卡住了,不知道为什么。以下是 String 基类型的示例:

#ifndef STRING_H
#define STRING_H

typedef struct _string
{
char* Value;
int Length;
String* (*Trim)(String*, char);

} String;

String* String_Allocate(char* s);
String* Trim(String* s, char trimCharacter);

#endif /* STRING_H */

和实现:

String* Trim(String* s, char trimCharacter)
{
int i=0;
for(i=0; i<s->Length; i++)
{
if( s->Value[i] == trimCharacter )
{
char* newValue = (char *)malloc(sizeof(char) * (s->Length - 1));
int j=1;

for(j=1; j<s->Length; j++)
{
newValue[j] = s->Value[j];
}

s->Value = newValue;
}
else
{
break;
}
}

s->Length = strlen(s->Value);
return s;
}

String* String_Allocate(char* s)
{
String* newString = (String *)malloc(sizeof(String));
newString->Value = malloc(strlen(s) + 1);
newString->Length = strlen(s) + 1;
strcpy(newString->Value, s);

newString->Trim = Trim;
}

然而,在 NetBeans 中编译时(对于 c、C++)我得到以下错误:

In file included from String.c:6:
String.h:8: error: expected specifier-qualifier-list before ‘String’
String.c: In function ‘String_Allocate’:
String.c:43: error: ‘String’ has no member named ‘Trim’
make[2]: *** [build/Debug/GNU-Linux-x86/String.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 77ms)

谁能帮我理解为什么 String->Trim 成员不存在和/或如何解决这个问题?

谢谢

最佳答案

使用递归结构你需要写

typedef struct _string String;

您定义结构之前,或者在内部将 String 替换为 struct _string(直到 typedef 进入范围)。

关于c - 在 C 中使用指向结构内部函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5629412/

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