Library.cpp中的Access数组

时间:2016-03-26 12:28:27

标签: c++ arrays

这可能是一个初学者的问题(我没有为此而去学校),但是现在它已经拖延了两天。

我正在Arduino写一个草图来移动一个机器人。我将我的职位存储在像

这样的数组中
int joint1[180];

如果所有内容都在robot.ino中,我就完美地运行并运行了,但是现在我想把这个数组放在一个自制的库stringer.hstringer.cpp中但是从它中访问它。 ino让其他人更容易理解。

重新定义的问题我以字符串的形式从sd读出一个自制的jcode我把这些值放到一个int白色的toint命令然后我将这个值存储在7个数组joint1 [180] joint2 [180]等现在我想在我的主脚本robot.ino中使用数组如何访问数组whitin stringer.ccp或者我将数组放在我的.ino文件中并使stringer发送一个字符串到robot.ino并将其分配到那里... ..这使得stringer中的其他功能真的很难?

测试情况 globals.h

//#include "Arduino.h"
//#include "StandardCplusplus.h"
//#include <vector>
#include "globals.h"



extern int Joint1[180];
extern int Joint2[180];
extern int Joint3[180];
extern int Joint4[180];
extern int Joint5[180];
extern int Joint6[180];
extern int Slomo[180];

globals.cpp

//#include "Arduino.h"
//#include "StandardCplusplus.h"
//#include <vector>
#include "globals.h"


int Joint1[180];
int Joint2[180];
int Joint3[180];
int Joint4[180];
int Joint5[180];
int Joint6[180];
int Slomo[180];

tester.ino

//#include "StandardCplusplus.h"
#include <globals.h>

int check = 100;
int temp = 0; 

void setup() {
for (int p = 0;p < check; p++){
Joint1[p] = p + 33;}
}

void loop() {
if (temp < check){Serial.println(Joint1[temp]);temp = temp + 1;}
}

另一种方式

globals.h

#include "Arduino.h"
#include "StandardCplusplus.h"
#include <vector>
#include "globals.h"



extern std::vector<int> Joint1;
extern std::vector<int> Joint2;
extern std::vector<int> Joint3;
extern std::vector<int> Joint4;
extern std::vector<int> Joint5;
extern std::vector<int> Joint6;
extern std::vector<int> Slomo;

globals.cpp

#include "Arduino.h"
#include "StandardCplusplus.h"
#include <vector>
#include "globals.h"


std::vector<int> Joint1(180);
std::vector<int> Joint2(180);
std::vector<int> Joint3(180);
std::vector<int> Joint4(180);
std::vector<int> Joint5(180);
std::vector<int> Joint6(180);
std::vector<int> Slomo(180);

我会收到错误:#include嵌套太深

1 个答案:

答案 0 :(得分:0)

不要使用数组。他们很糟糕,尤其是因为你不熟悉编程。请改用std::vector。在头文件中声明向量,如globals.h

#ifndef GLOBALS_H
#define GLOBALS_H
#include <vector>

extern std::vector<int> joint1;

#endif

请注意extern关键字。这意味着这只是joint1的声明。在源文件中定义向量,如globals.cpp

#include "globals.h"

std::vector<int> joint1(180);

编译时,请务必将globals.cpp与其他来源一起编译。

在您需要访问joint1的源文件中,请务必:

#include "globals.h"

您可以像使用数组一样访问向量中的元素:

joint1[index]

虽然你说你不熟悉编程,但我建议你改用vector的at()函数:

something = joint1.at(index);
joint1.at(index) = something;
// etc.

我推荐它,因为它会检查您是否尝试访问向量之外的元素。例如,如果您尝试:

joint.at(200)

程序中止,例外。

现在,有了这样说,拥有这样的全局变量变得乏味且难以使用。最好不要使用全局变量,而是定义函数来获取函数参数中所需的数据。

如果您无法访问C ++标准库,因此std :: vector不可用,那么您可以继续使用数组。 extern中的globals.h声明:

extern int joint1[180];

和.cpp中的定义:

int joint1[180];

不再有.at()或其他任何内容。只是简单的[index]