错误:'设置'在这方面没有申明

时间:2014-08-23 19:06:09

标签: c++ raspberry-pi declaration

我已经搜索了这个网站和谷歌,但我找不到任何帮助我的东西。我是一个完整的C ++菜鸟并且昨天开始编码,今天我花了几个小时试图弄清楚我做错了什么,我已经能够解决10个错误(在如此小的代码部分中很多,我知道 。_。)。我做错了什么?我确实拥有小型Java知识和一些脚本语言,如LUA和Autoit3。

这只是一个小程序,用于测试我的Raspberry PI上的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);
}

3 个答案:

答案 0 :(得分:2)

您在宣布之前呼叫set()。在文件中向上移动函数,使其高于调用它的第一个位置,或者像这样添加前向声明:

static int set(int pin, int state);

答案 1 :(得分:1)

C / C ++编译器很愚蠢 - 它们自上而下进行。当您从set()调用main()时,编译器仍然不知道set()到底是什么,因为它没有看到定义。

一种解决方案是在定义set()之前编写main()的显式声明。一种更简单的方法是将main()移动到最后,就像传统一样 - 恰恰是因为这个问题。

答案 2 :(得分:0)

C ++编译依赖于顺序。如果您调用尚未声明的内容,则会出现错误。在调用之前将函数体移动到某个位置,或在那里放置前向声明。