如何将CArray(MFC)移植到linux
我将一个Windows应用程序移植到linx。 我想将CArray MFC Method移植到linux。 的CARRAY被移植是如何将CArray(MFC)移植到linux
CArray<double,double> min;
我做了这个喜欢的等效...
#include <iostream>
#include <vector>
#include <list>
int main()
{
struct values
{
double value1;
double value2;
};
typedef std::vector<values> CArray;
CArray min;
CArray max;
return 0;
}
,但我越来越像错误回报...
vec1.cpp: In function ‘int main()’:
vec1.cpp:12:29: error: template argument for ‘template<class _Alloc> class std::allocator’ uses local type ‘main()::values’
vec1.cpp:12:29: error: trying to instantiate ‘template<class _Alloc> class std::allocator’
vec1.cpp:12:29: error: template argument 2 is invalid
vec1.cpp:12:37: error: invalid type in declaration before ‘;’ token
如有任何人都有关于将这个移植到linux的相应工作,请提供解决方案。
你需要让你的结构非本地类型:
#include <iostream>
#include <vector>
#include <list>
struct values
{
double value1;
double value2;
};
int main()
{
typedef std::vector<values> CArray;
CArray min;
CArray max;
return 0;
}
但是,而不是使用结构来保持对值,你应该受益于C++和使用std::pair:
#include <iostream>
#include <vector>
#include <list>
#include <utility>
typedef std::vector<std::pair<double, double> > CArray;
int main()
{
CArray min;
CArray max;
return 0;
}
谢谢你......它工作正常:) – suma 2013-04-26 09:00:01
第一行error
描述了问题所在:
template argument for ‘template<class _Alloc> class std::allocator’ uses local type ‘main()::values’
现在,让我们认为...如果编译器抱怨values
对main是本地的,我们该如何解决这个问题?我们可以,也许使values
不是本地的主要?所以你要找的答案是将values
的声明移到主要和全球范围之外。
当然,问题是,这个问题是错误的:它应该是为什么你需要在你的std::vector
一个结构和两个double
值?毕竟,您向我们展示的CArray
并不包含两个double
值。它拥有一个,所以std::vector<double>
应该做的伎俩。在尝试移植此代码时,您可能会发现documentation for CArray
有帮助。
谢谢你的链接... @Nik Bouglis。 – suma 2013-04-26 08:59:39
MFC CArray<double,double>
的STL等价物只是std::vector<double>
。
我已经检查此链接http://*.com/questions/3097445/vector-of-double2-error使两个值进入结构,然后在向量中使用。 – suma 2013-04-26 08:44:26
您不需要_two_值,MFC中的CArray类使用一个模板参数存储数据,另一个用于函数参数。如果您检查['CArray'参考](http://msdn.microsoft.com/en-us/library/4h2f09ct%28v=vs.100%29.aspx),您甚至会看到第二个模板参数默认为首先。使用'std :: vector'就足够了。 –
2013-04-26 08:45:15