2015-08-25 3 views
1

В C++, когда у меня есть структура определенияОчистка массива C к нулю при передаче в качестве члена указатель на структуру

struct foo 
{ 
    ... 
}; 

struct bar 
{ 
    foo FooData[10]; 
    ... 
}; 

И я хочу, чтобы написать функцию

void Baz(bar *Bar) 
{ 
    Bar->FooData = {}; 
} 

I получить сообщение об ошибке (C3079 в Visual Studio Community 2013) «список инициализаторов не может использоваться как правый операнд этого оператора присваивания».

Однако этот синтаксис, кажется, работает нормально в такой ситуации, как

int Array[10]; 
Array = {}; 
... 

Почему предыдущий пример не компилировать?

+5

Массивы не могут быть переданы. Кроме того, отметьте один язык только пожалуйста. – juanchopanza

+3

Используйте 'memset()'. –

+0

Я бы добавил, что ваш последний пример не должен компилироваться и не компилируется с clang 3.5; виновата визуальная студия за то, что она недостаточно строга. – Caninonos

ответ

1

Что касается вашего вопроса: вы можете использовать «{}», когда вы определяете свой массив ... но не потом.

Что касается проблемы, я бы рекомендовал memset

memset(Bar->FooData, 0, sizeof (bar->FooData));

Если вы хотите выделить FooData динамически, вы можете определить свой-структуру, как это:

struct bar 
{ 
    foo *FooData; 
    ... 
+0

'sizeof Bar-> Foodata' – john

+0

@john - спасибо :) – paulsm4

+0

Это закончилось бы слезами, если бы' foo' не имел тривиального макета. – juanchopanza

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

  • Нет связанных вопросов^_^