Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.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
C++ C++;使用Quadprog+;时编译错误+;与本征一起_C++_Eigen_Quadprog - Fatal编程技术网

C++ C++;使用Quadprog+;时编译错误+;与本征一起

C++ C++;使用Quadprog+;时编译错误+;与本征一起,c++,eigen,quadprog,C++,Eigen,Quadprog,这是我在这里的第一个问题,我已经搜索了很长时间,但没有解决方案。 我正在使用QUadprog++解决一个二次问题。当我单独在测试中使用它时,它是正常的。但是,当我将其实现到包含Eigen的项目中时,Eigen操作将出现错误,例如“矩阵A没有名为‘lu_逆’的成员”。如果我将Quadprog++(Array.hh和Quadprog++.hh)的头文件注释掉,错误就会消失。因此,我假设这是Eigen和Quadprog++的头文件之间的冲突错误。有人有什么线索吗?提前谢谢 如果您的使用名称空间quad

这是我在这里的第一个问题,我已经搜索了很长时间,但没有解决方案。
我正在使用QUadprog++解决一个二次问题。当我单独在测试中使用它时,它是正常的。但是,当我将其实现到包含Eigen的项目中时,Eigen操作将出现错误,例如“矩阵A没有名为‘lu_逆’的成员”。如果我将Quadprog++(Array.hh和Quadprog++.hh)的头文件注释掉,错误就会消失。因此,我假设这是Eigen和Quadprog++的头文件之间的冲突错误。有人有什么线索吗?提前谢谢

如果您的
使用名称空间quadprogp然后不要。您的不同库具有相同的类型名,这导致了您的错误。输入
quadprogpp::someFunction()可能还需要几个字符
放置
。这是因为您用名称空间符号污染了包含该头的所有文件,并可能导致名称冲突,这与您现在遇到的错误是相同的

Quadprog库位于它自己的命名空间中

#if !defined(_ARRAY_HH)
#define _ARRAY_HH

#include <set>
#include <stdexcept>
#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdlib>

namespace quadprogpp {

enum MType { DIAG };

template <typename T>
class Vector
#如果!已定义(_数组_HH)
#定义_数组_HH
#包括
#包括
#包括
#包括
#包括
#包括
名称空间Quadprogp{
枚举MType{DIAG};
样板
类向量
注意,在#includes之后,名称空间quadprogpp{在它的封闭括号中定义的所有内容将在范围内定义为四个PREPREPP,所以使用这个库中的任何一个,您必须用命名空间名称来前缀。这与使用标准库中的东西没有什么不同。我确信您已经编写了标准C++ Hello World

#include<iostream>
int main()
{
  std::cout << "hello world!" << std::endl;
  return 0;
}
#包括
int main()
{

std::cout您还可以切换到一个QuadProgpp版本,该版本可以直接使用特征类型:,;或者尝试相同算法的替代实现(也基于特征)。

您可以使用名称空间别名来减少键入:
名称空间qp=QuadProgpp;
然后编写
qp::someFunction()
,等等。感谢您的回复!但实际上没有“quadprogpp”的类或命名空间在文件中,或者你应该说,我应该创建这样的东西,然后按照你的建议使用它。@林靖宇我看了四方的+ +的来源,至少有些是在命名空间中。好的,我会查一下。我也是C++新手,所以还有很多要学。“约翰纳森非常感谢。现在我对它有了更好的理解。这对我帮助很大。!谢谢,我会检查一下。你试过了吗?你认为哪一个最容易实现?API基本相同。eiquadprog(及其变体)在机器人应用程序中,qpmad是一个相当常见的选择。qpmad在某些类型的问题上可能更快,但不太常见。好的,非常感谢!我的案例就在一个四边形机器人上。问题已经解决了,我得到了合理的结果。但似乎Quadprog++花费了相当长的时间。在调用它之前,我的算法只花了0.3毫秒就完成了,而我称之为0.8毫秒的时间跳跃,这非常接近求解时间的上限——1毫秒。也许我应该尝试你建议的其他实现。对我来说,问题是数组中的行。hh
#define det lu\u det#define inverse lu\u inverse#define solve lu\u solve
#include<iostream>

using namespace std;
int main()
{
  cout << "hello world" << endl;
  return 0;
}
#ifndef MYHEADER
#define MYHEADER
#include<string>
#include<vector>
#include<iostream>

using namespace std; //Never do this in a header.