2011-09-12 92 views
3

我藐視變量類型如下:push_back()在一個2D矢量中,什麼是正確的語法?

typedef unsigned int color[3]; 

然後我創建了一個類型的載體:

​​3210

現在,說我要一個新元素推回到這個矢量。什麼是正確的語法?我的G ++不會讓我這樣做:

color temp = {255, 255, 255}; 
RGB.push_back(temp); 

我本以爲這是一個很好的語法:(任何建議都非常讚賞

+0

爲什麼,什麼是G ++要反對呢? –

+0

我在生活中見過的最長的錯誤信息。這就像聖經的記錄或其他內容。這是錯誤消息的第1章: 'void __gnu_cxx :: new_allocator <_Tp> :: construct(_Tp *,const _Tp&)[with _Tp = unsigned int [3],_Tp * = unsigned int(*)[3]]'' : /usr/include/c++/4.5/bits/stl_vector.h:745:6:從'void std :: vector實例化爲向量<_Tp, _Alloc> :: push_back(const value_type&)[with _Tp = unsigned int [3],_Alloc = std :: allocator ,value_type = unsigned int [3]]' –

+0

part1c.cpp:66:24:從這裏實例化 /usr/include/c++/4.5/ext/new_allocator.h:105: 9:錯誤:ISO C++禁止初始化數組new –

回答

9

不能使用原始數組作爲類型的任何標準集裝箱。

的類型必須分配(它們有一個隱性或顯性operator =)和施工的(它們有隱性或顯性的默認和拷貝構造函數)。

你可以在換你的數組類型struct允許使用與標準集裝箱:

struct my_colour_array 
{ 
    unsigned int colours[3]; 
}; 

在這種情況下,編譯器將生成隱經營者和建設者。如果你想要不同的行爲,你可以定義自己的行爲。

供你使用它可能是有意義的有一個初始化的構造函數:

struct my_colour_array 
{ 
    unsigned int colours[3]; 

// initialising constructor 
    my_colour_array (unsigned int r, unsigned int g, unsigned int b) 
    { 
     this->colours[0] = r; 
     this->colours[1] = g; 
     this->colours[2] = b; 
    } 
}; 

然後你可以設置你的載體:

std::vector<my_colour_array> myvector; 
// push data onto container via a temporary 
myvector.push_back(my_colour_array(0,255,0)); 
// etc 

希望這有助於。

+0

+ 1提及可分配和可構造。 – Sean

+0

對於一個好的建議+1 :) –

+0

是的,這樣做。 G ++現在停止了哭泣。謝謝。 –

1

您顏色類型是非常簡單的,所以我會用另一種載體來定義這種類型:

typedef vector<int> color; 
vector<int> temp(3,0); // 3 ints with value 0 
temp[0] = 255; 
temp[1] = 255; 
temp[2] = 255; 

然後:

vector<color> RGB; 
RGB.push_back(temp);