2017-06-19 57 views
4

我不知道問題是什麼。非POD元素類型的可變長度陣列'集<int>'

#include <iostream> 
#include <algorithm> 
#include <fstream> 
#include <set> 
using namespace std; 

int main() { 
    ifstream infile("meeting.in"); 
    int FF, NumPaths; 
    infile >> FF >> NumPaths; 
    int Paths[NumPaths][4]; 
    set<int> Bessie_Times[FF]; 
    set<int> Elsie_Times[FF]; 
    for(int i=0;i<NumPaths;i++) 
    { 
     infile >> Paths[i][0] >> Paths[i][1] >> Paths[i][2] >> Paths[i][3]; 
    } 
    sort(Paths,Paths+NumPaths); 
} 

在這些線,我得到這些錯誤:

int Paths[NumPaths][4]; 

陣列類型 'INT [4]' 是不可分配

set<int> Bessie_Times[FF]; 

錯誤1:數組初始值設定項必須是初始值列表

錯誤2:非POD元素類型的「設置」可變長度數組

沒有人知道是什麼原因造成此?我已經研究過,但似乎找不到解決問題的任何事情。我假設我正在嘗試在不應該使用的變量類型中使用變量類型,但我無法找到這個變量的一個實例。

+1

VLAS是非標準的,無論如何,我會建議使用'的std ::向量<性病::設置>'。 – Borgleader

回答

1
int Paths[NumPaths][4];//Array type 'int[4]' is not assignable 

您正試圖靜態聲明與在編譯時未知的長度的陣列,但僅在運行時是已知的。你不能這樣做,因爲C++不允許它。你可以,但是,動態地聲明數組,其中長度在運行時已知:

int Paths[NumPaths][4]; // wrong 

int *Paths[4]; // right 
for (int i = 0; i < 4; i++) 
    Paths[i] = new int[NumPaths]; 
set<int> Bessie_Times[FF];//Error 1: Array initializer must be an initializer list Error 2: variable length array of non-POD element type 'set<int>'` 

同樣,這成爲:

set<int> Bessie_Times[FF]; // wrong 
set<int> *Bessie_Times = new set<int>[FF]; // right 

請注意,你必須記住在程序結束時釋放所有動態內存:

delete Paths[][]; 
delete BessieTimes[]; 
+0

看來你的指數倒退了。 – HolyBlackCat

+0

謝謝你的幫助! –

+1

另外,您需要刪除所有路徑[i]。儘管如此,你真的應該使用矢量和/或智能指針。 –

3

g ++編譯你的代碼很好(除了排序)。我不知道是否違反標準。但無論如何,在C++中,您應該使用stdlib中的容器:

#include <iostream> 
#include <algorithm> 
#include <fstream> 
#include <set> 
#include <array> 

using namespace std; 

int main() 
{ 
    ifstream infile("meeting.in"); 
    int FF, NumPaths; 
    infile >> FF >> NumPaths; 

    std::vector<array<int, 4>> Paths(FF); 
    std::vector<set<int>> Bessie_Times(FF); 
    std::vector<set<int>> Elsie_Times(FF); 

    for(int i = 0; i < NumPaths; i++) 
    { 
    infile >> Paths[i][0] >> Paths[i][1] >> Paths[i][2] >> Paths[i][3];  
    } 

    sort(Paths.begin(), Paths.end()); 

    return 0; 
} 

不確定排序;也許你需要添加

sort(Paths[i].begin(), Paths[i].end()); 

內環路

+0

非常感謝您的反饋! –

相關問題