我已经搜索了这个网站和谷歌,但我找不到任何帮助我的东西。我是一个完整的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);
}
答案 0 :(得分:2)
您在宣布之前呼叫set()
。在文件中向上移动函数,使其高于调用它的第一个位置,或者像这样添加前向声明:
static int set(int pin, int state);
答案 1 :(得分:1)
C / C ++编译器很愚蠢 - 它们自上而下进行。当您从set()
调用main()
时,编译器仍然不知道set()
到底是什么,因为它没有看到定义。
一种解决方案是在定义set()
之前编写main()
的显式声明。一种更简单的方法是将main()
移动到最后,就像传统一样 - 恰恰是因为这个问题。
答案 2 :(得分:0)
C ++编译依赖于顺序。如果您调用尚未声明的内容,则会出现错误。在调用之前将函数体移动到某个位置,或在那里放置前向声明。