2017-07-18 89 views
1

我已經寫了一個結構體和類,我想知道如何使用從文本文件中讀取的值來調整它們的大小。這裏是結構和類:如何調整結構或類成員的矢量大小?

typedef struct Chrom // creating the chrom structure 
{ 
    vector<vector <short int> > bit; 
    vector<vector <short int> > WaitingTime; //this is wij in the model 
    vector<vector <short int> > WaitingJob;//this is wj in the model, sigma wij must be equal to wj for each job J. 
    vector<vector <short int> > StartTime; 

    short int FinishTime;// finish time of each job in each machine 
    int fit; 
} chrom;  

在程序中,我讀了一個數字是m。 但在程序中當我嘗試使用chrom.ShortTime.resize(m)。它給了我一個錯誤。即使我試圖寫這樣的類:

class ProblemConstraint{ 
    short int Jobs, Machines; 
public: 
    vector <short int> Processing; 
    vector <short int> t1; 
    vector <short int> t2; 
    short int M; 
    short int W; 
    void set_values(int, int); 
    void resize(){ 
    ProblemConstraint.Processing.resize(Machines); 
    } 
}ProblemConstraint; 

但我不能調整類中的向量的大小。有關如何在程序中的類或結構中調整矢量大小的任何建議?

+5

你什麼錯誤? – NathanOliver

+1

「typedef struct Chrom」 - 你不需要在C++中使用'typedef',這是一個C-ISM。 –

+0

可能的重複 - https://stackoverflow.com/questions/37229215/how-to-resize-a-2d-vector-of-struct – JazzSoft

回答

0

您的問題至少部分是如何稱呼它的。

void resize(){ 
    ProblemConstraint.Processing.resize(Machines); 
} 

應該是這樣的:

void resize(){ 
    Processing.resize(Machines); 
    // OR 
    this->Processing.resize(Machines); 
} 

沒有名爲「ProblemConstraint」任何地方的對象,這是一個類型的,所以你不能用它.

+1

「*任何地方都沒有名爲」Processing「的對象*」 - 你的意思是*「ProblemConstraint」*? – vu1p3n0x

+0

@ vu1p3n0x是的。該死的錯別字。編輯 –

0

凱文·安德森已經解決的問題與你的class定義 - 讓我解決結構定義問題: -

隨着typedef你已經基本上做的是定義的類型struct Chromchrom所以你chrom.StartTime是無效的訪問。你必須實例化chrom,然後才能訪問單個成員類型的變量..試試這個: -

chrom A; 
A.StartTime.resize(10); 
+0

謝謝扎基爾和凱文,現在正在工作。 – questionnaire12