2012-06-16 3 views
0

У меня динамический массив, для которого я выделяю память с функцией внутри моего класса:Динамический массив в классе в C++

double *val; 
int n; // dimension 

void alloc (int nn) { // memory allocation for vector 
    n = nn; 
    val = new double[n]; 
} 

, но когда я пытаюсь поставить в нем данные в основном у меня есть следующая проблема:

Когда я типа:

a.val[3] = {1.0 , 1.0 , 1.0}; 

я получаю следующие очень неоднозначные ошибки:

syntax error : missing ';' before '{' 
syntax error : '{' 

Но когда я типа:

a.val[1]=1.0; 
a.val[2]=1.0; 
a.val[3]=1.0; 

это работает просто отлично. Кто-нибудь знает, почему?

+0

массив в два раза. оба они делают то же самое, не так ли? Я знаю a.val [3] = {1.0, 1.0, 1.0}; версия, как правило, правильная .. – System

ответ

3

можно только инициализировать массив в таким образом:

double a[3] = {1.0, 1.0, 1.0}; 

Ваши альтернативы являются:

void alloc (int nn) { // memory allocation for vector 
    n = nn; 
    val = new double[n]; 

    // one option is: 
    for (int i = 0; i < n; i++) 
    { 
     val[i] = 1.0; 
    }  

    // or you can also do: (thanks to Benjamin) 
    std::fill_n(val, n, 1.0); 

    // or: 
    std::fill(val, val + n, 1.0); 
} 
+0

массив инициализирован внутри класса, я отредактировал свой ответ, чтобы показать это. – System

+0

@System, как я сказал в своем ответе, массив уже инициализирован, когда вы выделили для него память, 'val = new double [n];' – nims

+0

@System см. Это, [Список инициализаторов для динамических массивов?] (Http : //stackoverflow.com/questions/7124899/initializer-list-for-dynamic-arrays) – nims

1

a.val[3] = {1.0 , 1.0 , 1.0};

это работает только для инициализации.

В вашем случае вы вначале выделили пространство динамически, в течение которого происходит инициализация.

Это будет работать

float val[3]={1.0,1.0,1.0}; 
+0

, но я хочу, чтобы вектор был связан с конкретным объектом, в данном случае a. Как мне это сделать? – System

+0

то, что вы сказали, действительно работает, результат, который я получаю для своей программы, правильный, но когда я печатаю a.val [1], например, я получаю очень большое (и неправильное) число. – System

0

вы можете использовать только {данные} для initilizing , но если вы все же хотите использовать это для установки нескольких значений попробуйте это:

double values[3] = {1.0, 2.0, 3.0}; 
memcpy(&(a.val), &values, sizeof(values)); 

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

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