gpt4 book ai didi

c - 将指针传递给函数但出现 "different type modifiers"错误

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:28 26 4
gpt4 key购买 nike

我对指针有点问题。

因此,首先我必须使用 C 语言,并且我创建了一个名为 _Arguments 的结构,它包含一组数据,包括一些指针。其中一些指针指向我创建的其他结构。

我将从结构中删除一些内容,以帮助保持帖子的小,但希望仍然包含主要信息。

所以我们有:

struct _Arguments
{
struct _AirPlanes *InAirPlanes;
struct _GroundPlanes *GroundedPlanes;
struct _Runway *Runways;
} Arguments;

然后

typedef struct _Runway
{
struct _GroundPlanes *FirstGroundPlane;
struct _AirPlanes *FirstAirPlane;
struct _Runway *Next;
struct _Runway *Previous;
};

typedef struct _AirPlanes
{
struct _AirPlanes *Next;
struct _AirPlanes *Previous;
struct _AirPlanes *NextOnRunway;
struct _AirPlanes *PrevOnRunway;
};

最后

typedef struct _GroundPlanes
{
struct _GroundPlanes *NextOnRunway;
struct _GroundPlanes *PrevOnRunway;
struct _GroundPlanes *Next;
struct _GroundPlanes *Previous;
};

结构包含一些更多的变量,但这是主要部分..因此,正如您所看到的,我在这里使用链表并制作类似跑道的东西。

现在我已经启动并运行了大量代码,但是我在寻找下一个最佳跑道时遇到了问题。我在主循环中调用了一个名为

的函数
struct _Runway* NextAvailable = NextAvailableRunway(&Arguments.Runways);

这会遍历所有跑道,以找到接地平面最少的跑道。但是,如果有两条跑道的停飞飞机数量相同,那么我想将它们相互进行测试,以找出等待着陆的飞机最少的跑道。

这意味着我有以下内容(速记以便更容易找到关键问题)

struct _Runway* NextAvailableRunway(struct _Runway** MainStartingRunway)
{
struct _Runway* CurrentRunway = *MainStartingRunway;
struct _GroundPlanes* CurrentGroundedPlane;
struct _Runway* BestRunway = NULL;

// Main Loop used to check ALL Runways
while (CurrentRunway != NULL)
{
// Look for the first plane on the current runway
// Loop through all the planes to count the planes on current Runway
// If the count of planes is the smallest found so far
BestRunway = CurrentRunway;

// Else if it matches our current smallest
BestRunway = RunwayWithLeastAir(BestRunway, CurrentRunway);

// Then finally go to next runway to loop though them all
CurrentRunway = CurrentRunway->Next;
}
return BestRunway;
}

显然上面的代码被缩短了,但它仍然有效

BestRunway = RunwayWithLeastAir(BestRunway, CurrentRunway);

所以我希望在这里做的是跳过我们拥有的 BestRunway 和 CurrentRunway,这样我们就可以同时测试它们并返回两者中最好的一个。据我所知,该函数传递的两个东西都是指向结构的指针,因此使用以下代码应该没问题。

struct _Runway* RunwayWithLeastAir(struct _Runway* BestRunway, struct _Runway* CurrentRunway)
{
struct _Runway* RunwayToCount = BestRunway;
struct _AirPlanes* CurrentAirPlane = NULL;
struct _Runway* LeastAirRunway = NULL;
int SmallestQueSize = -1;

// Loop through both runways
// Count the planes in the air for runway 1
// Count the planes in the air for runway 2
// Return the runway with the least in air planes.

while (RunwayToCount != NULL)
{
CurrentAirPlane = RunwayToCount->FirstAirPlane;
int CurrentRunwaysQueSize = 0;

// Loop to count the planes on current Runway
while (CurrentAirPlane != NULL)
{
CurrentRunwaysQueSize++;
CurrentAirPlane = CurrentAirPlane->NextOnRunway;
}

if (CurrentRunwaysQueSize < SmallestQueSize || SmallestQueSize == -1)
{
SmallestQueSize = CurrentRunwaysQueSize;
LeastAirRunway = RunwayToCount;
}

if (RunwayToCount == BestRunway)
RunwayToCount = CurrentRunway;
else
RunwayToCount = NULL;

}
return LeastAirRunway;
}

但是我得到的错误是:错误 C2373“RunwayWithLeastAir”:重新定义;不同的类型修饰符

现在我假设这里的问题是我将两个指针之外的东西传递给 RunwayWithLeastAir 函数。当我注释掉运行该函数的行(NextAvailableRunway 函数中的那一行)时,它运行良好,但是当我尝试并按照我认为它应该运行的方式实际使用该函数时,它失败了。

我相信这可能是因为我在 NextAvailableRunway 函数中使用了一个指针指针,所以当它传递 CurrentRunway 时它实际上传递的可能不是标准指针???

有什么想法吗?

最佳答案

下面几行给你一个警告:

BestRunway = RunwayWithLeastAir(BestRunway, CurrentRunway);

Warning C4013 'RunwayWithLeastAir' undefined; assuming extern returning int

这些警告应被视为错误。

现在你像这样声明你的RunwayWithLeastAi:

struct _Runway* RunwayWithLeastAir(struct _Runway* BestRunway, struct _Runway*  CurrentRunway)

但是由于编译器已经假设 RunwayWithLeastAir 是一个返回 int 的函数,所以这个声明是矛盾的,因此是错误的。

要消除错误,您必须在使用前声明该函数。

只需将其放在 struct 声明之后,但至少 NextAvailableRunway 函数之前。

struct _Runway* RunwayWithLeastAir(struct _Runway* BestRunway, struct _Runway*  CurrentRunway);

以下最小示例说明了问题:

int bar()
{
foo(1);
}

void *foo(int a)
{
}

但这将编译:

void *foo(int a);

int bar()
{
foo(1);
}

void *foo(int a)
{
}

关于c - 将指针传递给函数但出现 "different type modifiers"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42434958/

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