【问题标题】:Passing array of structures to a function in different file in C将结构数组传递给C中不同文件中的函数
【发布时间】:2014-09-23 16:26:56
【问题描述】:

我需要将文件“file1.c”中定义的结构数组传递给一个函数,比如“myFunc()”,该函数在另一个文件“file2.c”中定义。问题是我不知道如何在我的头文件“header.h”或我的 file2.c 中的函数本身中设置 myFunc() 的原型,因为该结构只会在 file1.c 中定义。这是一个例子。

file1.c

#include "header.h"

#define dim 30
#define searchAgents 30

struct Wolf{

    double pos[dim];
    double fitness;

}Pack[searchAgents];

int main(){
    myFunc(Pack); //not sure it's ok
    return 0;
}

file2.c

#include "header.h"

void myFunc(struct Wolf Pack[]){ //I don't know how to set this argument
    Pack[0].pos[0] = 1; //just an example
}

header.h

#ifndef HEADER_H_
#define HEADER_H_   

void myFunc(struct Wolf); //I don't know how to set this prototype

#endif

我读过有关将结构传递给函数的信息,但是当您在另一个文件中定义函数时,情况就不同了。感谢您的宝贵时间。

【问题讨论】:

  • 你所做的看起来不错,只是你应该在 header.h 中说 void myFunc(struct Wolf Pack[]);。可能您还希望在其中定义searchAgents,以便您知道myFunc() 中有多少只狼。 (您传递的不是结构,而是指向Pack 数组中第一个结构的指针。)
  • 它输出这个:错误:数组类型有不完整的元素类型
  • 你需要在header.h中插入结构体。 File2.c 不知道这个结构
  • 函数调用没问题吧?因为它输出这个:错误:形式参数1的类型不完整 myFunc(Pack);

标签: c arrays function struct


【解决方案1】:

header.h

#ifndef HEADER_H_
#define HEADER_H_   

//Add all needed includes

#define dim 30
#define searchAgents 30

typedef struct Wolf{
    double pos[dim];
    double fitness;
}Pack; //Declaration

void myFunc(Pack *);

#endif

主要

#include "header.h"

int main(){
    Pack packArray[searchAgents]; //Definition or initialization if you like
    myFunc(packArray);
    return 0;
}

file2.c

#include "header.h"

void myFunc(Pack *pack){ //just a pointer to Pack structure
    pack[0].pos[0] = 1;
}

【讨论】:

  • 这就是我需要的。谢谢
【解决方案2】:

您可以尝试将 Pack[] 设为外部类型变量

extern 关键字告诉编译器该变量是在其他一些 .c 文件中定义的,该文件与该文件一起编译,在 gcc 编译器中使用 -o 选项。

extern Pack[10]; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-06
    • 2013-04-12
    • 2015-01-03
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多