2016-03-08 123 views
0

我有一個類,它包含一個在編譯時未知的數組。該數組在構造函數中初始化。然後,我有檢查的其他功能,如果一個元素是數組中:什麼是std :: find這個錯誤的優雅解決方案?

class myClass 
{ 
    int tab[]; 
    public: 
    myClass(int array[], int length) 
    { 
     std::copy(array, array + length, tab) 
    } 
    void myFunction() 
    { 
     int x = 8; 
     int *ptr = std::find(std::begin(tab), std::end(tab), tdc_x); 
     if (ptr) /* here goes my code */ 
    } 
}; 

我得到了以下錯誤:

error: no matching function for call to ‘begin(int [0])’

出了什麼問題上面這段代碼?我知道我不能在指針中使用std :: find,但是我的數組是一個數組,而不是一個腐朽的指針。

我跟着this的例子。我還包括算法頭。我究竟做錯了什麼?

我在C++ 11中編譯我的代碼。

編輯:我現在明白了。但我怎樣才能以優雅的方式做我想做的事?

  1. If I use a pointer instead of the empty array, I won't be able to use std::find.
  2. if I give my array an arbitrary size, I won't be able to copy a bigger array. What should I do?
+6

'INT標籤[];'你不能有空數組。 –

+0

@πάνταῥεῖ,我的數組不是空的,它還沒有被初始化。編譯器不會抱怨。你能否建議我想要實現的替代解決方案? – user2738748

+0

你是從哪裏初始化它的? –

回答

2
int tab[]; 

標準不允許空數組,但一些編譯器做的擴展。這並不是合法的。

If I use a pointer instead of the empty array, I won't be able to use std::find.

事實並非如此,你仍然可以使用std::finds是你的標籤數組的大小)。

int *ptr = std::find(tab, tab + s, tdc_x); 

if I give my array an arbitrary size, I won't be able to copy a bigger array. What should I do?

使用std::vector<int>,然後調用resize()

相關問題