2013-04-26 214 views
1

我將一個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://stackoverflow.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

回答

4

你需要讓你的結構非本地類型:

#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

2

第一行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

1

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