title: Initializing a struct from a constructor
body: <p>I'm getting back into writing some C++ and I'm honestly rusty. I get the feeling I'd find a quick answer to my question if I just knew how to phrase it properly, but still I'd appreciate your help. </p>
  
  <p>sanitycheck.cpp:</p>
  
  <pre><code>#include &lt;string&gt;    
  using namespace std;
  
  typedef struct STR_1 {    
    int val_a, val_b;
  
    STR_1 (int a, int b)
    { val_a = a; val_b = b; }    
  } STR_1;
  
  typedef struct STR_2{    
    string name;
    STR_1 myStr1;
  
    STR_2 (string n, STR_1 s)
    { name=n; myStr1 = s; }
  } STR_2;
  
  int main(){
  
    return 0;
  } // end main
  </code></pre>
  
  <p>When I try to compile with <code>g++ -o sanitycheck ./test/sanitycheck.cpp</code> I get the following,</p>
  
  <pre><code>./test/sanitytest.cpp: In constructor ‘STR_2::STR_2(std::string, STR_1)’:
  ./test/sanitytest.cpp:25:3: error: no matching function for call to ‘STR_1::STR_1()’
     { name=name; myStr1 = &amp;s; }
     ^
  ./test/sanitytest.cpp:25:3: note: candidates are:
  ./test/sanitytest.cpp:11:3: note: STR_1::STR_1(int*, int*)
     STR_1 (int *a, int *b)
     ^
  ./test/sanitytest.cpp:11:3: note:   candidate expects 2 arguments, 0 provided
  ./test/sanitytest.cpp:7:16: note: STR_1::STR_1(const STR_1&amp;)
   typedef struct STR_1 {
                  ^
  ./test/sanitytest.cpp:7:16: note:   candidate expects 1 argument, 0 provided
  ./test/sanitytest.cpp:25:23: error: no match for ‘operator=’ (operand types are ‘STR_1’ and ‘STR_1*’)
     { name=name; myStr1 = &amp;s; }
                         ^
  ./test/sanitytest.cpp:25:23: note: candidate is:
  ./test/sanitytest.cpp:7:16: note: STR_1&amp; STR_1::operator=(const STR_1&amp;)
   typedef struct STR_1 {
                  ^
  ./test/sanitytest.cpp:7:16: note:   no known conversion for argument 1 from ‘STR_1*’ to ‘const STR_1&amp;’
  </code></pre>
  
  <p>One thing I'm not clear on is why would <code>STR_1 myStr1;</code> of <code>STR_2</code> need to call the <code>STR_1</code> constructor in the first place? Couldn't I initialize both types with,</p>
  
  <pre><code>int main()
  {
      STR_1 bob = STR_1(5,6);
      STR_2 tom = STR_2('Tom',bob);
      return 0;
  }
  </code></pre>
  
  <p>Thanks!</p>