声明struct指针时出错

时间:2014-07-14 08:41:36

标签: c gcc avr avr-gcc

我试图在我的微控制器上实现配置读写器(使用AVR-GCC),并遇到一些编译错误,特别是:

error: expected constructor, destructor, or type conversion before '(' token
error: expected constructor, destructor, or type conversion before '.' token

在我的主文件中。导致此问题的代码是:

#include "cfg.h"

struct config_t* config;
config.temp = TEMP_C;
config.precision = 9;
config.time = 0;

config_read(config);

cfg.h的内容:

#ifndef CFG_h
#define CFG_h

#include <avr/eeprom.h> 
#include <inttypes.h>

#define TEMP_C 0
#define TEMP_F 1
#define TEMP_K 2

typedef struct config_t {
    uint8_t temp;
    uint8_t precision;
    int32_t time;
} config_t;

void config_read(struct config_t * config);
void config_write(const struct config_t * config);

#endif

cfg.c的内容:

#include "cfg.h"

void config_read(struct config_t* config) {
    eeprom_read_block((void*)&config, (void*)(0), sizeof(config_t));
}

void config_write(const struct config_t* config) {
    eeprom_write_block((const void*)&config, (void*)(0), sizeof(config_t));
}

4 个答案:

答案 0 :(得分:2)

struct config_t* config;

问题:config是未初始化的变量。您需要使用malloc为config_t struct

创建一个对象
config.temp = TEMP_C;
config.precision = 9;
config.time = 0;

问题:由于config_t是一个指针,你可以使用&#34;访问config_t struct的方法或变量。 - &GT; &#34;操作员不是&#34; 。 &#34;操作

像:

config->temp = TEMP_C;
config->precision = 9;
config->time = 0;

config_read(config);

答案 1 :(得分:1)

由于您使用的是struct config_t*,因此在初始化config变量时应使用箭头而不是点。

答案 2 :(得分:1)

config_read函数用于读取配置。设置config的成员并将其称为没有意义。相反,做:

struct config_t config;
config_read(&config);

在编写配置时设置变量是有意义的:

struct config_t config = { 0 };
config.temp = TEMP_C;
config.precision = 9;
config.time = 0;
config_write(&config);

答案 3 :(得分:1)

使用Typedef即

typedef struct config_t {
    uint8_t temp;
    uint8_t precision;
    int32_t time;
} config_t;

使用结构时不必使用 struct ,当使用指针访问结构成员时,必须使用“config_t-&gt;结构成员”而不是config_t。结构成员