2013-04-22 74 views
0

我是一名學生,還沒有被教過矢量,但我現在需要使用它們。我正在嘗試製作一個結構向量。該結構是彙編代碼的標籤。每當我想添加一個標籤時,我調整矢量大小,但是,當我嘗試從標籤中檢索信息時,它們都是一樣的。不幸的是,我實際上不能分享我的代碼,但我會展示我認爲必要的線路來幫助我解決此問題。那麼,我做錯了什麼?如果您需要查看更多代碼,請告訴我。使用矢量

全局聲明:

vector<Label> labeldir; 

調整大小矢量和添加信息,標籤是標籤的在彙編代碼文件的名稱:

labeldir.resize(labelnum + 1); 
labeldir[labelnum].name = label; 

注意:它是在while循環運行,labelnum每次發現一個標籤時都會發生。

每個標籤的訪問名稱的實例:

for (int i = 0; i < labeldir.size(); i++){ 
    cout << "Label entry " << i << " name : " << labeldir[i].name << endl; 
} 

相應的輸出,注意問題(上述代碼在while循環中,這是它的3次迭代):

Label entry 0 name : start 
Label entry 0 name : done 
Label entry 1 name : done 
Label entry 0 name : five 
Label entry 1 name : five 
Label entry 2 name : five 

彙編代碼中的前3個標籤,第一個和第二個標籤之間會有行,但它們將是常規說明。:

start add 1 2 1 decrement reg1 
done halt    end of program 
five .fill 5 
+0

,你可以表現出更多的代碼?你提到所有這些都在循環運行? – loganfsmyth 2013-04-22 04:06:57

+4

那麼你應該真的只是使用push_back而不是像這樣調整大小。 – RandyGaul 2013-04-22 04:09:53

+0

無法正確理解。你可以提一下,你期望什麼產出,你會得到什麼? – 2013-04-22 04:12:03

回答

2

我倒是差不多打賭Label結構的name成員是char *。這意味着不是爲每個標籤創建一個單獨的字符串,而只是創建單獨的指針 - 但它們都指向相同的地方。

當您嘗試打印出您的內容時,它們都指向相同的緩衝區,因此每個標籤都顯示最近讀入該緩衝區的名稱。

治癒:使用std::string而不是char *

+0

...你的假設是正確的,讓我現在嘗試解決這個問題。 – easyxtarget 2013-04-22 04:33:39

+0

這正是問題所在。我感到啞巴,如果他看到這個,我的老教授會很失望。由於我不得不使用C/C++,並且我忘記了指針的要點,所以它已經有一段時間了。 – easyxtarget 2013-04-22 04:44:51

2

這是一個有點很難看到你在做什麼錯,但讓我有一個猜測:

您的代碼加載了您的載體可能應該是這樣的:

#include <string> 

struct Label 
{ 
    Label(const std::string& N) : Name(N) 
    {} 

    Label() 
    {} 

    std::string Name; 
}; 

int main() 
{ 
    std::vector<Label> labeldir; 

    labeldir.push_back(Label("one")); 
    labeldir.push_back(Label("two")); 
    labeldir.push_back(Label("three")); 
    labeldir.push_back(Label("four")); 

    int i = 0; 
    for(auto l : labeldir) 
    { 
     std::cout << "Label entry " << i++ << " name : " << l.Name << "\n"; 
    } 

    system("PAUSE"); 
    return 0; 
} 
+0

不錯的代碼,除了系統[「暫停」] ... – Skalli 2013-04-22 14:19:39

0

根據您提供的信息,我假設您在向labeldir添加標籤名稱時遇到問題。

,只要你找到了一個標籤,你可以通過以下方式添加:

vector<Label> laberdir; 
//As you fill the struct label with the name 
Label label1; 
label1.name = "start"; 
labeldir.pushback(label1); 
labelNum = labelNum + 1; 

和你傷心的標籤是結構類型爲

struct Label 
{ 
    std::string name; 
};