2016-07-13 6 views
0

Я хотел бы иметь структуру с несколькими массивами blitz ++. эта программа создает такую ​​структуру, однако я не могу правильно распределить объект. Является единственной альтернативой для формулировки структуры с помощью указателей для массива blitz ++, который выделяется вне структуры?Blitz ++ array in struct

#include <iostream> 
#include <blitz/array.h> 

using namespace std; 
using namespace blitz; 

struct Bstruct{ 
    Array<double,1> B; 
}; 

int main(){ 

    Bstruct str; 
    Array<double,1> x(10); 
    x = 1.0; 
    str.B = x; 

    cout << "x = " << x << endl; 
    cout << "str.B = " << str.B << endl; 

    return 0; 
} 

➜ blitz_struct git:(master) ✗ ./struct 
x = (0,9) 
[ 1 1 1 1 1 1 1 1 1 1 ] 

str.B = (0,-1) 
[ ] 
+0

конец кода пропущено выше показывает выход программы. 'x' и' str.B' должны быть одинаковыми. –

+0

предположительно 'blitz :: Array' не обеспечивает надлежащего/глубокого оператора присваивания копий. и его видимая домашняя страница не работает, поэтому я не могу проверить заголовок! –

+0

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

ответ

0

я нашел, что это работает:

#include <iostream> 
#include <blitz/array.h> 

using namespace std; 
using namespace blitz; 

struct Bstruct{ 
    Array<double,1> B; 
}; 

int main(){ 

    Bstruct str; 
    Array<double,1> x(10); 
    x = 1.0; 
    str.B.resize(10); 
    str.B = 1.0; 

    cout << "x = " << x << endl; 
    cout << "str.B = " << str.B << endl; 

    return 0; 
} 

➜ blitz_struct git:(master) ✗ ./struct      
x = (0,9) 
[ 1 1 1 1 1 1 1 1 1 1 ] 

str.B = (0,9) 
[ 1 1 1 1 1 1 1 1 1 1 ] 
+1

вправо, поэтому кажется, что 'blitz :: Array' не предоставляет не разбитый оператор присваивания копий. Я был бы уверен, чтобы избежать этого, если бы у меня была потребность в контейнере, отличном от стандартного. Есть ли причина, по которой вы не можете использовать 'std :: vector', который имеет семантику семантической семантики? –

+0

Да, к сожалению, это часть устаревшего кода, написанного с blitz ++, и изменение этого на что-нибудь еще было бы огромной работой. вот почему. –

+0

о, простите, может быть, у меня не ваш вопрос. вы спрашиваете, почему я не мог использовать 'std :: vector' вместо структуры? Я хочу иметь имя для элемента, а не 'container.at (3)', например, как в 'container.named_element' –