2012-04-02 48 views
0

我想分配按以下方式動態字符串數組,我得到一個錯誤:動態字符串數組分配錯誤

struct Test 
{ 
    std::string producer[]; 
    std::string golden[]; 
}; 

Test test1 = 
{ 
     {"producer1", "producer2"} , 
     {"golden1" , "golden2"} 
}; 

我得到的錯誤是,有太多的初始化爲std::string[0], 但如果我下車陣列部分它的工作原理:

struct Test 
{ 
    std::string producer; 
    std::string golden; 
}; 

Test test1 = 
{ 
     "producer1" , 
     "golden1" 
}; 

在此先感謝!

+0

'的std :: string生產者[];'你不能聲明一個數組而不必說明應包含多少個元素。 – 2012-04-02 07:24:55

+0

@你可以,但是你不能定義它,你必須動態地去做。 – littleadv 2012-04-02 07:25:18

+0

@littleadv是的,但非靜態成員聲明是一個定義,並且需要大小。而且你不能動態地分配任何已經聲明的東西。要動態地分配一個'string []',你必須將該對象定義爲'string *',而不是'string []'。 string []'合法的唯一位置是作爲'extern',或者作爲函數的參考參數(但這有點棘手,因爲您不能將函數傳遞給已知大小的數組) 。 – 2012-04-02 07:52:48

回答

3

您不能以這種方式初始化零大小的數組,因爲您必須動態地分配內存。只能在類型定義中指定尺寸時才能執行操作。

看到我對類似問題的回答here

1

可以使用C++ 11 均勻初始化

struct Test 
{ 
    vector<string> producer; 
    vector<string> golden; 
}; 

Test test1 = 
{ 
    {"producer1", "producer2"}, 
    {"golden1", "golden2"} 
}; 

以下示例代碼編譯細跟克++:

#include <iostream> 
#include <string> 
#include <vector> 

using namespace std; 

struct Test 
{ 
    vector<string> producer; 
    vector<string> golden; 
}; 


ostream & operator<<(ostream & os, const Test & test) 
{ 
    os << "------------------------" << endl; 
    os << "producer={" << endl; 
    for (auto& p : test.producer) 
    { 
     os << '\t' << p << endl; 
    } 
    os << "}" << endl; 

    os << "golden={" << endl; 
    for (auto& p : test.golden) 
    { 
     os << '\t' << p << endl; 
    } 
    os << "}"; 
    os << "------------------------" << endl; 

    return os; 
} 



int main() 
{ 
    Test test1 = 
    { 
     {"producer1", "producer2"}, 
     {"golden1", "golden2"} 
    }; 

    cout << test1 << endl; 


    return 0; 
}