- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有先有鸡还是先有蛋的问题。我想将数据结构传递给包含指向需要该结构的例程的指针的例程。
我举了一个很简单的例子。
我需要在定义之前使用 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/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!