C++ struct and function declaration. Why doesn#39;t it compile?(C++结构和函数声明。为什么它不能编译?)
本文介绍了C++结构和函数声明。为什么它不能编译?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这编译得很好(Arduino):
struct ProgressStore {
unsigned long ProgressStart;
unsigned long LastStored;
uint32_t FirstSectorNr;
};
void IRAM_ATTR ProgressInit(ProgressStore aProgressStore){
}
省略IRAM_ATTR,它将不再编译(?):
Verbruiksmeter:116:6: error: variable or field 'ProgressInit' declared void
116 | void ProgressInit(ProgressStore aProgressStore){//, uint32_t SectorNr) {
| ^~~~~~~~~~~~
Verbruiksmeter:116:19: error: 'ProgressStore' was not declared in this scope
116 | void ProgressInit(ProgressStore aProgressStore){//, uint32_t SectorNr) {
| ^~~~~~~~~~~~~
推荐答案
查看此处:https://stackoverflow.com/a/17493585/2027196
Arduino做到了这一点,它在Main中找到您的所有函数定义,并为代码的睡觉上方的每个函数生成一个函数声明。结果是您试图在声明ProgressStore结构之前使用ProgressStore。我认为IRAM_Attr必须抑制此行为。
它最终在编译前生成以下代码:
void ProgressInit(ProgressStore aProgressStore); // <-- ProgressStore not yet declared
struct ProgressStore {
unsigned long ProgressStart; //Value of the counter at the start of the sector
unsigned long LastStored; //Should be new CounterValue-1, but you never know...
uint32_t FirstSectorNr; //1st of 2 sectors used for storage of progress
};
void ProgressInit(ProgressStore aProgressStore) {//, uint32_t SectorNr) {
// ProgressStore.1stSector = SectorNr;
}
一种解决方案是将您的结构和类移动到它们自己的.h
文件中,并将它们包括在顶部。
ProgressStore.h
#ifndef PROGRESS_STORE_H
#define PROGRESS_STORE_H
struct ProgressStore {
unsigned long ProgressStart; //Value of the counter at the start of the sector
unsigned long LastStored; //Should be new CounterValue-1, but you never know...
uint32_t FirstSectorNr; //1st of 2 sectors used for storage of progress
};
#endif // PROGRESS_STORE_H
main.cpp
#include "ProgressStore.h"
void ProgressInit(ProgressStore aProgressStore) {//, uint32_t SectorNr) {
// ProgressStore.1stSector = SectorNr;
}
函数声明仍是自动生成的,但会插入#include
%s
这篇关于C++结构和函数声明。为什么它不能编译?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:C++结构和函数声明。为什么它不能编译?
基础教程推荐
猜你喜欢
- 调用std::Package_TASK::Get_Future()时可能出现争用情况 2022-12-17
- 设计字符串本地化的最佳方法 2022-01-01
- 运算符重载的基本规则和习语是什么? 2022-10-31
- C++ 程序在执行 std::string 分配时总是崩溃 2022-01-01
- 您如何将 CreateThread 用于属于类成员的函数? 2021-01-01
- C++ 标准:取消引用 NULL 指针以获取引用? 2021-01-01
- 什么是T&&(双与号)在 C++11 中是什么意思? 2022-11-04
- 如何在 C++ 中处理或避免堆栈溢出 2022-01-01
- 如何定义双括号/双迭代器运算符,类似于向量的向量? 2022-01-01
- C++,'if' 表达式中的变量声明 2021-01-01