2016-07-13 5 views
0

Ich möchte eine Struktur mit mehreren Blitz ++ Arrays in ihm haben. Dieses Programm erstellt eine solche Struktur, aber ich kann das Objekt nicht richtig zuordnen. Ist die einzige Alternative, eine Struktur mit Zeigern zu einem Blitz ++ Array zu formulieren, das außerhalb der Struktur zugeordnet ist?Blitz ++ Array in Struktur

#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

das Ende des oben zeigen Ihnen die Ausgabe des Programms snipped Code. 'x' und' str.B' sollten gleich sein. –

+0

vermutlich 'blitz :: Array' bietet keinen richtigen/tiefen Kopierzuweisungsoperator. und seine offensichtliche Homepage ist unten, deshalb kann ich die Kopfzeile nicht überprüfen! –

+0

Ja ich weiß, die Homepage ist down, das ist wirklich ein Schmerz. Wie auch immer, das funktioniert jetzt. –

Antwort

0

fand ich dies funktioniert:

#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

richtig, so scheint es, als würde "blitz :: Array" keinen nicht-kaputten Kopierzuweisungsoperator bereitstellen. Ich würde es unbedingt vermeiden, wenn ich einen Nicht-Standard-Container hätte. Gibt es einen Grund, warum Sie nicht 'std :: vector' verwenden können, was eine vernünftige Semantik für die Kopierzuweisung hat? –

+0

Ja, das ist leider ein Stück Legacy-Code, geschrieben mit Blitz ++ und das zu ändern, wäre eine Menge Arbeit. deshalb. –

+0

oh sorry vielleicht habe ich deine Frage nicht beantwortet. Sie fragen, warum ich nicht einen 'std :: vector' anstelle der Struktur verwenden könnte? Ich möchte einen Namen für das Element haben anstatt "container.at (3)", zum Beispiel, wie in "container.named_element" –