错误:未在此范围内声明'set'
error: 'set' was not declared in this scope
我已经在这个网站和谷歌上搜索过了,但我找不到任何帮助我的东西。我是一个完全的c++新手,昨天才开始编码,今天我花了几个小时试图找出我做错了什么,我已经能够解决大约10个错误(这在这么小的代码部分是很多的,我知道。)我做错了什么?我确实有一点Java知识和一些脚本语言,如LUA和Autoit3。
这只是一个小程序,用于测试我的树莓派上的GPIO引脚,并习惯c++语法和学习一些编程知识。
编辑:错误发生两次,我已经注意到使用注释
#include <wiringPi.h>
#include <stdio.h>
#include <iostream>
using namespace std;
//Declaration of global variables
int delayTime;
//Gets executed once to setup parameters
static int setup() {
delayTime = 750;
}
//Gets executed until ESC is pressed
static int program() {
set(0, 1); //FIRST ERROR
set(5, 0);
delay(delayTime);
set(0, 0);
set(5, 1);
delay(delayTime);
}
//Main function getting called at program start
int main() {
bool running = true;
setup();
puts("Press 'STRG+C' to exit the program. Then run './off'");
if (wiringPiSetup() == -1)
return 1;
pinMode(0, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
set(4, 1); //SECOND ERROR
while (running) {
program(); //Run the code above
}
digitalWriteByte(0);
return 0;
}
//Shortcuts for basic functions
static int set(int pin, int state) {
digitalWrite(pin, state);
return 0;
}
static int get(int pin) {
return digitalRead(pin);
}
您在声明set()
之前调用它。将函数在文件中向上移动,使其位于第一次调用它的位置之上,或者添加像这样的向前声明:
static int set(int pin, int state);
C/c++编译器是哑的——它们自顶向下进行。当你从main()
调用set()
时,编译器还不知道set()
是什么,因为它还没有看到定义。
一个解决方案是在定义main()
之前编写set()
的显式声明。一种更简单的方法是将main()
移到最后,正如传统的那样——正是因为这个问题。
c++编译依赖于顺序。如果调用尚未声明的东西,就会得到一个错误。要么将函数体移到调用它之前的位置,要么在那里放置前向声明。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 未在作用域中声明unordered_map
- C++避免重复声明的语法是什么
- 如何确保C++函数在定义之前声明(如override关键字)
- 错误:未在此范围内声明'reverse'
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 为什么在定义函数之前先声明它
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- #ifdef和未声明的标识符
- 没有显式声明的int[]中的foreach
- 在基于范围的for循环中使用结构化绑定声明
- 在将变量声明为引用时,堆在释放后使用
- C++:无法访问声明的受保护成员
- 在声明中合并两个常量"std::set"(不是在运行时)
- 如何在 C++ 中转发声明 std::set?
- 为什么在声明std::set时需要重复排序子程序
- C++编译器错误:ISO C++禁止声明没有类型的“set”
- 错误:未在此范围内声明'set'
- 如何在c++中声明带有指针类型比较器的set
- 从声明为 std::set<std::shared_ptr> edges_ 的edges_中删除边<Edge>;