Hello,<div><br></div><div>i am experiencing a little trouble when reading my stored matrix.</div><div>when i write and read the same matrix i stored, it works.</div><div>but if i only run the program to read the matrix file, i get this error.</div>

<div><br></div><div><div>terminate called after throwing an instance of &#39;std::runtime_error&#39;</div><div>  what():  unknown matrix dimensions in archive</div></div><div><br></div><div>This is a one-file example source code i made for you guys so you can test, its based on the same problem i have on my bigger code.</div>

<div>try running it as it is, then comment the &quot;write&quot; method and run it again so it only reads the matrices, youll get the error eventually. but you will never get it if you write and read, its weird.</div><div>

<br></div><div>how can this be solved?</div><div><br></div><div><div>//CODE</div><div>#include &lt;fstream&gt;</div><div>#include &lt;ginac/ginac.h&gt;</div><div><br></div><div>using namespace std;</div><div>using namespace GiNaC;</div>

<div>symbol q(&quot;q&quot;),v(&quot;v&quot;);</div><div><br></div><div>void read( string filename, GiNaC::matrix* qvCol, GiNaC::matrix* qvMat );</div><div>void write( string filename, GiNaC::matrix qvCol, GiNaC::matrix qvMat );</div>

<div><br></div><div>int main(int argc, char** argv){</div><div><br></div><div>    GiNaC::matrix qvMat(2,2), qvCol(2,1), rm1, rm2;</div><div><br></div><div>    //mat1</div><div>    qvCol(0,0) = q*v;</div><div>    qvCol(1,0) = 2*q*v;</div>

<div>    //mat2</div><div>    qvMat(0,0) = q*v;</div><div>    qvMat(0,1) = 2*q*v;</div><div>    qvMat(1,0) = 3*q*v;</div><div>    qvMat(1,1) = 4*q*v;</div><div><br></div><div>    cout &lt;&lt; endl &lt;&lt; &quot;m1: &quot; &lt;&lt; endl &lt;&lt; qvCol &lt;&lt; endl;</div>

<div>    cout &lt;&lt; &quot;m2: &quot; &lt;&lt; endl &lt;&lt; qvMat &lt;&lt; endl &lt;&lt; endl;</div><div><br></div><div>    write(&quot;example.gin&quot;, qvCol, qvMat);</div><div>    read(&quot;example.gin&quot;, &amp;rm1, &amp;rm2);</div>

<div>    cout &lt;&lt; endl &lt;&lt; &quot;rm1: &quot; &lt;&lt; endl &lt;&lt; rm1 &lt;&lt; endl;</div><div>    cout &lt;&lt; &quot;rm2: &quot; &lt;&lt; endl &lt;&lt; rm2 &lt;&lt; endl &lt;&lt; endl;</div><div>    return 0;</div>

<div>}</div><div><br></div><div>void read( string filename, GiNaC::matrix* qvCol, GiNaC::matrix* qvMat ){</div><div>    cout &lt;&lt; &quot;Main::Read File.......&quot;;</div><div>    fstream fr(filename.c_str(),ios::in|ios::binary);</div>

<div>    if( !fr.is_open() ){</div><div>        printf(&quot;bad file\n&quot;);</div><div>        return;</div><div>    }</div><div>    GiNaC::archive_node canCol, canMat;</div><div>    GiNaC::lst syms(q, v);</div><div>    fr &gt;&gt; canCol;</div>

<div>    fr &gt;&gt; canMat;</div><div>    qvCol-&gt;read_archive(canCol, syms);</div><div>    qvMat-&gt;read_archive(canMat, syms);</div><div>    fr.close();</div><div>    cout &lt;&lt; &quot;OK: &quot; &lt;&lt; filename &lt;&lt; endl;</div>

<div>}</div><div><br></div><div>void write( string filename, GiNaC::matrix qvCol, GiNaC::matrix qvMat ){</div><div><br></div><div>    cout &lt;&lt; &quot;Main::Write File......&quot;;</div><div>    fflush(stdout);</div><div>

    //abrir archivo para escritura</div><div>    fstream fw(filename.c_str(),ios::out|ios::binary);</div><div>    GiNaC::archive_node anCol, anMat;</div><div>    qvCol.archive( anCol );</div><div>    qvMat.archive( anMat );</div>

<div>    fw &lt;&lt; anCol;</div><div>    fw &lt;&lt; anMat;</div><div>    fw.close();</div><div>    cout &lt;&lt; &quot;OK: &quot; &lt;&lt; filename &lt;&lt; endl;</div><div>}</div><div>//END</div></div><div><br></div><div>

<br></div>