What an great library!<br><br>I am trying to extend one of the shared memory examples but I am getting a compilation error. Basically I have added a vector of char_strings to the complex object and added a method to add a string to the vector. If anyone would take a moment to give me suggestion for how to fix this issue or a suggestion for how I should better add strings to this vector I would appreciate your input. <br>
<br>The error is:<br>error C2664: &#39;void boost::container::vector&lt;T,A&gt;::push_back(const� boost::interprocess::rv&lt;T&gt; &amp;)&#39; : cannot convert parameter 1 from &#39;char_string *&#39; to &#39;const boost::interprocess::rv&lt;T&gt; &amp;&#39;<br>
with [T=char_string, A=char_allocator]<br>and[T=boost::container::basic_string&lt;char,std::char_traits&lt;char&gt;,char_allocator&gt;]<br>Reason: cannot convert from &#39;char_string *&#39; to &#39;const boost::interprocess::rv&lt;T&gt;&#39;<br>
with [T=boost::container::basic_string&lt;char,std::char_traits&lt;char&gt;,char_allocator&gt;]<br>No constructor could take the source type, or constructor overload resolution was ambiguous<br><br>The code is:<br>#include &lt;boost/interprocess/managed_shared_memory.hpp&gt;<br>
#include &lt;boost/interprocess/allocators/allocator.hpp&gt;<br>#include &lt;boost/interprocess/containers/map.hpp&gt;<br>#include &lt;boost/interprocess/containers/vector.hpp&gt;<br>#include &lt;boost/interprocess/containers/string.hpp&gt;<br>
<br>using namespace boost::interprocess;<br><br>//Typedefs of allocators and containers<br>typedef managed_shared_memory::segment_manager���� segment_manager_t;<br>typedef allocator&lt;void, segment_manager_t&gt;������������������������ void_allocator;<br>
typedef allocator&lt;int, segment_manager_t&gt;��������������������������� int_allocator;<br>typedef vector&lt;int, int_allocator&gt;������������������������������������������������ int_vector;<br>typedef allocator&lt;int_vector, segment_manager_t&gt;�������������� int_vector_allocator;<br>
typedef vector&lt;int_vector, int_vector_allocator&gt;����������������������� int_vector_vector;<br>typedef allocator&lt;char, segment_manager_t&gt;������������������������ char_allocator;<br>typedef basic_string&lt;char, std::char_traits&lt;char&gt;, char_allocator&gt;�� char_string;<br>
typedef vector&lt;char_string, char_allocator&gt;������������������������� char_string_vector_vector;<br><br>class complex_data<br>{<br>public: //Obviously making the variables of complex_data public isn&#39;t a good idea I am just playing here for the moment<br>
�� int����������������������� id_;<br>�� char_string������ char_string_;<br>�� char_string_vector_vector char_string_vector_vector_;<br>�� double price_;<br>�� //Since void_allocator is convertible to any other allocator&lt;T&gt;, we simplify<br>
�� //the initialization taking just one allocator for all inner containers.<br>�� complex_data(int id, const char *name, double prce, const void_allocator &amp;void_alloc)<br>����� : id_(id), char_string_(name, void_alloc), char_string_vector_vector_(void_alloc), price_(prce)<br>
�� {}<br><br>�� // add a string --&gt; Error is on the next line<br>�� void addStringItem(char_string* s){char_string_vector_vector_.push_back(s);}<br>};<br><br>int main ()<br>{<br>�� //Remove shared memory on construction and destruction<br>
�� struct shm_remove<br>�� {<br>����� shm_remove() { shared_memory_object::remove(&quot;MySharedMemory&quot;); }<br>����� ~shm_remove(){ shared_memory_object::remove(&quot;MySharedMemory&quot;); }<br>�� } remover;<br><br>
�� //Create shared memory<br>�� managed_shared_memory segment(create_only,&quot;MySharedMemory&quot;, 65536);<br><br>�� //An allocator convertible to any allocator&lt;T, segment_manager_t&gt; type<br>�� void_allocator alloc_inst (segment.get_segment_manager());<br>
<br>�� //Construct the shared memory map and fill it<br>�� complex_data *mymap = segment.construct&lt;complex_data&gt;(&quot;Complex_Data&quot;)(7, &quot;hi&quot;, 7.0, alloc_inst);<br><br>�� //<br>�� return 0;<br>}<br>