2016-07-07 57 views
0

我想在C++中使用字符串,但我不能。當我創建字符串時,我總是收到一條錯誤消息。我想解除這個問題,所以如果有可能我不想使用。 (我不知道,我應該怎麼用矩陣字符串使用)OS X錯誤非pod元素類型'字符串'的可變長度數組

這裏是我的代碼的一小部分:

#include <iostream> 
#include <fstream> 

using namespace std; 

int main() 
{ 
    string fajlnev="tancrend.txt"; 
    ifstream fajl(fajlnev.c_str()); 

    int i=0; 
    int db=0; 
    string atmeneti; 

    while (!fajl.eof()) 
    { 
     getline(fajl,atmeneti); 
     getline(fajl,atmeneti); 
     getline(fajl,atmeneti); 
     db++; 
    } 
    db--; 

    string tanc[db][3]; 

    fajl.close(); 
    ifstream fajl2(fajlnev.c_str()); 

    for(i=0;i<db;i++) 
    { 
     fajl2>>tanc [i][0]; 
     fajl2>>tanc [i][1]; 
     fajl2>>tanc [i][2]; 
    } 
+0

'的#include '。而且,儘管這裏不是問題,但是要擺脫'using namespace std;'。 –

+0

可怕的代碼。不支持VLA,'db'可以是'-1'。 – LogicStuff

+3

強制性閱讀:[爲什麼iostream :: eof在循環條件內被認爲是錯誤的?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) – molbdnilo

回答

0

string tanc[db][3];是非法的C++。所有用作數組大小的值都應該是編譯時常量(因此在執行程序之前應該能夠知道確切的值)。

有些編譯器允許將可變長度的數組作爲語言擴展,但這些數組通常是有限的(通常它們允許C允許並且不超過)。

在您的情況下,最好使用C++可變長度容器:std::vector

std::vector<std::array<std::string, 3>> tanc(db); 
相關問題