gpt4 book ai didi

仅在 c 中的结构中的函数

转载 作者:行者123 更新时间:2023-12-04 05:13:19 24 4
gpt4 key购买 nike

我很难编译这段 C 代码。

基本上发生的是:

  • 它确实可以编译,但是当我运行它时(在终端上)它会打印出 me:Illegal instruction
  • 我尝试在 Xcode 上调试它,当它尝试执行 (*fraction).print() 时,它说:EXC_BAD_ACCESS
  • 如果我删除 (*fraction).print() 行,一切正常(如果我只删除下一行,也会发生同样的情况)

启用 GNU99 和 -fnested-functions 标志

我不想只改变其他东西的主要功能

这段代码让我疯狂了一个下午,所以如果能提供一点帮助,我将不胜感激。谢谢

#include <stdlib.h>
#include "string.h"
#include "stdio.h"

typedef struct
{
int numerator;
int denominator;
void (*print)(); // prints on screen "numerator/denominator"
float (*convertToNum)(); //returns value of numerator/denominator
void (*setNumerator)(int n);
void (*setDenominator)(int d);
} Fraction;

Fraction* allocFraction(Fraction* fraction); //creates an uninitialized fraction
void deleteFraction(Fraction *fraction);


Fraction* allocFraction(Fraction* fraction)
{
void print()
{
int a= 10;
printf("%i/%i", (*fraction).numerator, (*fraction).denominator);
a--;
}

float convertToNum()
{
return (float)(*fraction).numerator/(float)(*fraction).denominator;

}

void setNumerator (int n)
{
(*fraction).numerator= n;
}

void setDenominator (int d)
{
(*fraction).denominator= d;
}

if(fraction== NULL)
fraction= (Fraction*) malloc(sizeof(Fraction));



if(fraction)
{
(*fraction).convertToNum= convertToNum;
(*fraction).print= print;
(*fraction).setNumerator= setNumerator;
(*fraction).setDenominator= setDenominator;
}

return fraction;
}


void deleteFraction(Fraction *fraction)
{
free(fraction);
}


int main (int argc, const char * argv[])
{
Fraction *fraction= allocFraction(fraction);
(*fraction).setNumerator(4);
(*fraction).setDenominator(7);
(*fraction).print(); //EXC_BAD_ACCESS on debug. Illegal instruction in Terminal
printf("%f", (*fraction).convertToNum());
(*fraction).print();

deleteFraction(fraction);
return 0;
}

最佳答案

您不能像编写 Javascript 一样编写 C。

具体来说,print() 似乎是 allocFraction() 中的一个嵌套函数(它本身不是标准 C,而是一个 gcc延期)。您不能从定义范围之外的函数指针调用嵌套函数。即使您不从嵌套范围访问外部范围内的任何内容,也是如此。

您的代码似乎试图在 C 中进行面向对象的编程。您是否考虑过 C++?

关于仅在 c 中的结构中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8652209/

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