错误:未在此范围内声明'set'

error: 'set' was not declared in this scope

本文关键字:set 声明 范围内 错误      更新时间:2023-10-16

我已经在这个网站和谷歌上搜索过了,但我找不到任何帮助我的东西。我是一个完全的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++编译依赖于顺序。如果调用尚未声明的东西,就会得到一个错误。要么将函数体移到调用它之前的位置,要么在那里放置前向声明。