gpt4 book ai didi

c++ - 以结构为参数的指向结构的例程指针

转载 作者:太空狗 更新时间:2023-10-29 21:16:53 25 4
gpt4 key购买 nike

我有先有鸡还是先有蛋的问题。我想将数据结构传递给包含指向需要该结构的例程的指针的例程。

我举了一个很简单的例子。

我需要在定义之前使用 CalcDataStruct,如果我在结构之后添加它,则 FuntctionPrototype 未定义。

我遇到的问题只出现在前两行,其余的可能包含一些语法错误,因为我没有在编译器内部检查过。

typedef void(*FunctionPrototype)(CalcDataStruct *Ptr);

struct CalcDataStruct
{
int A, B, C, D;
int Values;
char SignA, Sign B;
int Result;
FunctionPrototype Routine;
}


struct ScanStruct
{
char Sign;
int Values;
FunctionPrototype Routine;
};


const ScanStruct ExampleList[] =
{
{ '+', 2, AddTwo },
{ '+', 3, AddThree }
};

void AddTwo(CalcDataStruct *Ptr)
{
// use the data and if needed put it back
}

void AddThree(CalcDataStruct *Ptr)
{
// use the data and if needed put it back
}

void GetFunction(CalcDataStuct *Ptr, ScanStruct *List)
{
// Very simple return based on nothing
Ptr->Routine = *List[(1)].Routine;
}

void main()
{
CalcDataStruct A;
// struct is filled

// Fill in the routine pointer based on data
GetFunction(A, ExampleList)
// Execute the routine fetched with all the data
A->Routine(A)
}

最佳答案

您需要添加前向声明(见下文)。

struct CalcDataStruct; 只会声明 struct CalcDataStruct 存在,所以 typedef void(*FunctionPrototype)(CalcDataStruct *Ptr); 声明将会成功,因为现在编译器知道 struct CalcDataStruct 存在但不知道结构的细节,这无关紧要,因为所有 FunctionPrototype 声明需要知道参数是指向 struct CalcDataStruct 的指针。

struct CalcDataStruct; // <<< add this

typedef void(*FunctionPrototype)(CalcDataStruct *Ptr);

struct CalcDataStruct
{
int A, B, C, D;
int Values;
char SignA, Sign B;
int Result;
FunctionPrototype Routine;
}

关于c++ - 以结构为参数的指向结构的例程指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34312915/

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