如何将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的相应工作,请提供解决方案。

+0

我已经检查此链接http://*.com/questions/3097445/vector-of-double2-error使两个值进入结构,然后在向量中使用。 – suma 2013-04-26 08:44:26

+5

您不需要_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

你需要让你的结构非本地类型:

#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; 
} 
+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有帮助。

+0

谢谢你的链接... @Nik Bouglis。 – suma 2013-04-26 08:59:39

MFC CArray<double,double>的STL等价物只是std::vector<double>