繁体   English   中英

Library.cpp中的Access数组

[英]Access Array in Library.cpp

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

我正在Arduino写一个草图来移动一个机器人。 我将我的位置存储在一个数组中

int joint1[180];

我得到了它完美的工作和运行,如果一切都在robot.ino,但现在我想把这个阵列中的一个自制库stringer.hstringer.cpp但从.ino存取权限它,使之变得更轻松去了解别人。

重新定义了这个问题,我以字符串形式从sd中读取了一个自制的jcode,然后将这些值放入int里面,然后将其存储在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嵌套太深

不要使用数组。 它们很糟糕,特别是因为你是编程新手。 使用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不可用,那么您可以继续使用数组。 globals.h extern声明:

extern int joint1[180];

和.cpp中的定义:

int joint1[180];

没有更多的.at()或其他任何东西。 只是普通的[index]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM