gpt4 book ai didi

似乎无法找到结构

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:32 25 4
gpt4 key购买 nike

我试图在更新后从结构中获取值,但是我面临的问题是一个未声明的错误,因为它似乎看不到它。

sonicNav.h文件

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

extern void calcSonicS();

sonicThread.c 文件。

    int funcLock = 0;

void calcSonicS() {
struct results *rData = results;
rData = malloc(sizeof(struct results));

int newVal1 = rData->sens1;
int newVal2 = rData->sens2;
int newVal3 = rData->sens3;
int newVal4 = rData->sens4;

if(funcLock == 0){
funcLock = threadFunc();//returns INT value of 1.

}
printf("value 1: %d value 2: %d value 3: %d value 4 %d\n", newVal1, newVal2, newVal3, newVal4);
}

sonicThread.h文件

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
#include<string.h>
#include<errno.h>
#include<pthread.h>
#include<sys/time.h>
#include<wiringPi.h>


//GPIO PINS stored within structs, for each sonic range finder.
typedef struct sonicPins{
//pins and id.
int trig;
int echo;
int id;
}args;

typedef struct results{
//all pins
int sens1;
int sens2;
int sens3;
int sens4;

}rData;

sonicThread.c文件

void* setup(void  *pinsPtr);
extern int threadFunc();

pthread_t pt[4];

int threadFunc()
{
struct sonicPins pinsArray[4] = { { 21, 20, 1 }, { 16, 12, 2 }, { 26, 19, 3 }, { 13, 6, 4 } };
for(int i =0; i <4; i++){
pthread_create(&pt[i], NULL, setup, &pinsArray[i] );
}
return 1;
}

void* setup(void *pinsPtr)
{
struct sonicPins *ptr = pinsPtr;
int trig = 0, Echo = 0, id;
trig = ptr->trig;
Echo = ptr->echo;
id = ptr->id;
struct results *storePtr;
}

上面的代码片段确实更新了结构“结果”,所有线程确实同时工作,每个传感器发出自己的结果。

主要.c

int main(){
//void(*foo1)(int, int, int);
//foo1 = &calcSonicS;

printf("In operation\n");
int operational = 1;

while(operational ==1)
{
//sonic range finders.
calcSonicS();
//gyroscope and acceometer.
}
return 0;
}

错误输出:

sonicNav.c: In function ‘calcSonicS’:
sonicNav.c:5:28: error: ‘results’ undeclared (first use in this function)
sonicNav.c:5:28: note: each undeclared identifier is reported only once for each function it appears in

最佳答案

struct results *rData = results;

error: ‘results’ undeclared (first use in this function)

上面一行尝试声明和定义一个名为rData 的局部变量,它的类型为struct results *,并用变量的值(局部或全局)结果。错误消息告诉您没有这样的变量。

您可能混淆的是 C++(旧的、糟糕的)样式初始化:

MyClass variable = MyClass();

由于您对 rData 所做的下一件事是分配它...

rData = malloc(sizeof(struct results));

...您的问题的解决方案是从前面的行中完全删除“错误的初始化”。你也可以把它打包成一行:

struct results *rData = malloc(sizeof(struct results));

看着...

typedef struct results{
// ...
} rData;

...我猜你对结构(类型)名、类型名和变量名的关系有严重的误解。上面的定义给你:

  • 名称results作为结构(类型)名称,所以可以用在struct之后来命名定义的结构类型。
  • 名称 rData 作为类型名称,指的是与 struct results 相同的(结构)类型。

然后当您声明变量 struct results *rData 时,另外 rData 作为变量的名称。这是可能的,但远非好的风格。

如果您删除 typedef,那么事情将发生巨大变化:您将拥有一个名为 rData 且类型为 struct results 的全局变量.

关于似乎无法找到结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32233086/

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