2015-11-02 91 views
1

Tab鍵分隔example.txt文件:值不能用於初始化類型爲「字符」的實體

1 MODEL1 
2 MODEL2 
3 MODEL3 

我的主:

int main() 
{ 
    int number; 
    char model[6]; 
    list myList; 

    ifstream infile; 
    infile.open("example.txt"); 

    //reading first line from file 
    infile >> (int)number; 
    infile >> model; 
    myList.Insert({ number, model}, 1); // error here on model 

    return 0; 
} 

myList中類的僞:

struct data{ 
    int number; 
    char model[6]; 
}; 

struct Node{ 
    data data; 
    ... 
}; 

Node = myNode[100] 

void Insert(data x, int position) 
{ 
    myNode[position].data = x; 
} 

我從example.txt文件讀取我的第二行字符有問題。如何將MODEL1,MODEL2,MODEL3讀入myList?

+0

除了編譯錯誤,您還有一個緩衝區溢出錯誤。從流中讀取字符串時,會附加空終止符字符。您的型號名稱包含6個字符。因此,當流入7個字符時,你會溢出'char model [6]'。 – user2079303

+0

與你的問題無關,但你有一個更嚴重的錯誤,即*緩衝區溢出*。你聲明一個由6個字符組成的數組,但是你會在數組中寫入* 7個*字符,寫出越界並導致*未定義的行爲*。你忘記了C風格的字符串需要額外的字符來終止字符串。改用['std :: string'](http://en.cppreference.com/w/cpp/string/basic_string)。順便說一句,使用'std :: string'將解決你所問的問題。 –

+1

在'main'中,爲什麼不聲明'struct data data_item;'並且讀'infile >> data_item.number;'和'infile >> data_item',而不是分別聲明'int number'和'char model [6]'。模型「,然後調用'myList.Insert(data_item,1);'? – lurker

回答

1

{number, model}正嘗試初始化成員變量model作爲本地model的副本,但原始數組無法被複制初始化。

你將不得不使用std::string

int main() 
{ 
    int number; 
    std::string model; 
    list myList; 

    ifstream infile; 
    infile.open("example.txt"); 

    infile >> number; 
    infile >> model; 
    myList.Insert({number, model}, 1); 
} 

struct data 
{ 
    int number; 
    std::string model; 
}; 

這也將修復的緩衝區溢出錯誤,@ user2079303和@JoachimPileborg發現。


可以也保持原陣列,並手動strncpy當地model數組成員model。然而這在C++中並不建議。

+0

行infile >>模型給出錯誤:沒有opperator「>>」匹配這些操作數操作數類型是:std :: ifstream >> std :: string; – Dancia

+0

你有沒有'#include '? – emlai

+0

現在正常工作,謝謝。認爲我不需要任何其他包括,因爲它已經std :: – Dancia