Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ARDUINO到期时编译EKFLASE C++库故障_C++_Arduino_Arduino Due - Fatal编程技术网

ARDUINO到期时编译EKFLASE C++库故障

ARDUINO到期时编译EKFLASE C++库故障,c++,arduino,arduino-due,C++,Arduino,Arduino Due,更新:通过实际使用->运算符[]替换运算符[],修复了最终错误 更新2:逻辑错误修复! _P错误是所有剩下的!它只在适当的时候出现,而不是UNO或其他董事会 更新3:将临时矩阵的名称更改为_ptworked,可能是一个保留宏 新错误: Arduino: 1.6.1 (Mac OS X), Board: "Arduino Due (Programming Port)" /Users/zackbright/Documents/Arduino/libraries/StandardCplusplus-

更新:通过实际使用->运算符[]替换运算符[],修复了最终错误

更新2:逻辑错误修复! _P错误是所有剩下的!它只在适当的时候出现,而不是UNO或其他董事会

更新3:将临时矩阵的名称更改为_ptworked,可能是一个保留宏

新错误:

Arduino: 1.6.1 (Mac OS X), Board: "Arduino Due (Programming Port)"

/Users/zackbright/Documents/Arduino/libraries/StandardCplusplus-master/func_exception.cpp: In function 'void std::__throw_bad_alloc()':
/Users/zackbright/Documents/Arduino/libraries/StandardCplusplus-master/func_exception.cpp:30:18: error: exception handling disabled, use -fexceptions to enable
        throw bad_alloc();
                       ^
Error compiling.
看起来我需要使用-feexceptions

本报告将提供更多信息 在编译期间显示详细输出 在文件>首选项中启用

这里有很多,但我希望付出一切是我应该做的,以得到一个好的答案

将Arduino 1.6.1用于OSX上到期的Arduino

使用此库获取std名称空间

这是我在编译时遇到问题的库:

我已经将过滤器库转换为这种格式,以便能够在arduino中使用它,现在至少能够在没有找到头文件的情况下进行包含:

如您所见,我必须将文件重命名为.h标题,但不确定这是否有必要,并将文件夹重命名为与我的.cpp和.h标题相同的标题,当然,还必须编辑所有随附文件以不同方式引用文件: 范例

现在是这样的:

#include "ekfilter.h"
所以,现在,当我尝试编译:

#include <StandardCplusplus.h>
#include <ekfilter.h>

void setup() {
  // put your setup code here, to run once:
}

void loop() {
 // put your main code here, to run repeatedly:
}
在/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:37:0中包含的文件中, from/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33, 来自TestKalmanLibrary.ino:2:

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h:74:48:错误:在“{”标记之前应该有类名

struct KalmanError : public std::logic_error {
                                            ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h:在构造函数“Kalman::KalmanError::KalmanErrorconst string&”中: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ktypes.h:82:9:错误:

类“Kalman::KalmanError”没有任何名为“logic\u error”的字段

   : logic_error(message) {}
     ^
在/Users/insertnamehere/Documents/Arduino/libraries/standardclusplus master/cctype:19:0包含的文件中, 来自/Users/insertnamehere/Documents/Arduino/libraries/standardclusplus master/istream:21, 来自/Users/insertnamehere/Documents/Arduino/libraries/standardclusplus master/iostream:27, 来自/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:35, from/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33, 来自TestKalmanLibrary.ino:2: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:在全局范围内:

/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:807:20:

错误:数字常量前应为非限定id

 mutable Matrix _P;  //!< Temporary matrix.
                ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:在成员函数“const Matrix&Kalman::ekfilter::calculateP const”中: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:435:10:错误:请求在非类类型为“int”的“16”中的成员“resize”

 _P.swap(P_);
    ^
   _P.resize(n, n);         // keep this resize
      ^
   _P.resize(n, nn);
      ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:439:15:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:443:17:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:444:17:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:444:35:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:447:19:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:450:17:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:450:27:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:在成员函数“virtual void Kalman::ekfilter::sizeUpdate”中: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:572:26:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:583:10:错误:请求在非类类型为“int”的“16”中的成员“resize”

 _P.swap(P_);
    ^
   _P.resize(n, n);         // keep this resize
      ^
   _P.resize(n, nn);
      ^
/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter_impl.h:586:17:错误:表达式不能用作函数

     _P(i,i) = U(i,i);
           ^
       _P(i,j)  = U(i,j)*U(j,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
             ^
       _P(i,i) += U(i,j)*_P(i,j);
                               ^
         _P(i,j) += U(i,k)*U(j,k)*U(k,k);
               ^
       _P(j,i) = _P(i,j);
             ^
       _P(j,i) = _P(i,j);
                       ^
       U(i,j) = _P(i,j);
                      ^
       _P(i,j) = U(i,j);
             ^
在/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector.h:34:0中包含的文件中, from/Users/insertnamehere/Documents/Arduino/libraries/ekfilter/ekfilter.h:33 , 来自TestKalmanLibrary.ino:2: /Users/insertnamehere/Documents/Arduino/libraries/standardclusplus master/string:In'std::basic_string::size_type std::basic_string::find_first_of const std::basic_string&,std::basic_string::size_type const[with Ch=char;Tr=std::char\u traits;A=std::allocator;std::basic_string::size_type=unsigned int]: /Users/insertnamehere/Documents/Arduino/libraries/ekfilter/kvector_impl.h:66:42:此处为必填项 /Users/insertnamehere/Documents/Arduino/libraries/standardclusplus master/string:518:64:注意:通过非限定查找未找到依赖基“std::vector>”中的声明

                             if( Tr::eq(str[j], operator[](i)) ){
                                                            ^
/Users/insertnamehere/Documents/Arduino/libraries/standardclusplus-master/string:518:64:注意:请改用“this->operator[]” 编译时出错

这里有很多问题需要解决,但这都是在我解决了库的格式化方式的一些问题之后:

我必须在/boards.txt编译首选项中添加-fppermissive

他们的代码中有一个奇怪的实现无法编译,我改变了这一点:

// These are explicitly GNU C++ specific.

// This is the exception class we report -- "GNUCC++\0".

const _Unwind_Exception_Class __gxx_exception_class
= ((((((((_Unwind_Exception_Class) 'G' 
  << 8 | (_Unwind_Exception_Class) 'N')
 << 8 | (_Unwind_Exception_Class) 'U')
    << 8 | (_Unwind_Exception_Class) 'C')
   << 8 | (_Unwind_Exception_Class) 'C')
  << 8 | (_Unwind_Exception_Class) '+')
 << 8 | (_Unwind_Exception_Class) '+')
<< 8 | (_Unwind_Exception_Class) '\0');

所有问题现在都解决了

通过在我的编译器标志中包含-feexceptions解决了上一个错误


谢谢大家的帮助。

看起来你应该在ekfilter.h中包含include,它已经在ktypes.h中了,这就是出现错误的地方。另外值得注意的是,我必须将include Arduino.h添加到所有文件中,以便它们也可以为Arduino编译。然后你可能需要重新配置std库,并提供异常支持哦,伙计,是的,你完全正确。不知道我怎么会错过!更改了库中的系统配置,很好!非常感谢!剩下的就是P矩阵误差。