2013-07-24 2 views
0

Been в C# -land на некоторое время, и я не могу работать, как сделать это в C++ (в эскизе Arduino)Возвращение переменного массива длиной от функции

Я хотел бы вызвать функцию из библиотеки который возвращает список байтов неизвестной длины. Вроде как это:

byte devices[] = MyLib::EnumerateDevices(); 

А в библиотеке:

byte[] MyLib::EnumerateDevices() 
{  
    int count = 0;  

    //some code that modifies count 

    static byte *temp = new byte[count]; // Assume count is 2 here 

    temp[0] = 42; 
    temp[1] = 44;  

    return temp; 
} 

Очевидно, у меня есть все мне указатели и derefs либо отсутствует, либо в неправильном месте ...

Помощь?

Dave

+0

Вам понадобится способ передать длину массива, если вы не можете вывести длину только из последовательности байтов? –

+0

Ардуино использует AVR libc, который не поддерживает новые и удаляет: http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_cplusplus – Craig

ответ

5

Это то, что векторы для:

std::vector<int> func() 
{ 
    std::vector<int> r; 
    r.push_back(42); 
    r.push_back(1337); 
    return r; 
} 

Vectors имеют функцию в size() член, который возвращает именно то, что вы хотите.

Если вы хотите указатель из вектора, а затем написать

const int *p = &vec[0]; 

(очевидно, заменить int с любым типом вы специализированы вектор с.)

+0

В эти дни вы можете сократить это, чтобы возвратить {42 , 1337}; ', если вам нравится краткость. –

+0

@MikeSeymour хорошо, да. Мой ход был только для того, чтобы показать, что «здесь вы делаете материал с вектором, а затем возвращаете его» :) –

+0

std :: vector (и остальная часть STL) недоступна на arduino. – Craig

2

Вы не можете вернуть массив в C или C++. Вы можете вернуть указатель, но в этом случае вам также потребуется вернуть размер. Вместо этого используйте std::vector<int>, намного проще.

Смежные вопросы