Difference between revisions of "Olena/CompilerErrors"

From LRDE

(Upload olena web site)
 
(Don't include the menu if the page is used included in another page)
 
(One intermediate revision by one other user not shown)
Line 1: Line 1:
  +
<noinclude>{{OlenaMenu}}</noinclude>
  +
 
{{DISPLAYTITLE:Constructing ''non-const'' images from ''const'' images}}
 
{{DISPLAYTITLE:Constructing ''non-const'' images from ''const'' images}}
   

Latest revision as of 15:04, 12 November 2014



Compiler error message (g++ 3.0.4):

undefined reference to `oln::image2d<oln::int_u<(unsigned)8>, type::bottom>
::image2d[in-charge](oln::image2d<oln::int_u<(unsigned)8>, type::bottom> const&)'

sample source 1:

1  const image2d<int_u8> test1(1,1);
2  image2d<int_u8> test2 = test1;

sample source 2:

1  struct foo
2  {
3	 foo(const image2d<int_u8> & img) : m_Img(img) {}
4	 image2d<int_u8> m_Img;
5  };
6  in main:
7  image2d<int_u8> test1(1,1);
8  foo bar(test1);

Explanation:
If you look into src/core/image{1,2,3}d.hh you will find:

1 image2d(const self& rhs); // w/o impl.

Why is there no definition for this contructor ?
Think about Olena image as a kind of "data pointer", when you copy an Olena image, the data are not copied, only the pointer is copied. Thus the data will be shared by both images. When you have a const image, it means you want the data to be const; constructing a non - const image from a const image will result in an image which can modify the data whereas we expected data as const. Hence this constructor was not defined to prevent from this.

Ok, but why having a declaration if there is no definition ?
See Const Images page for a detailed explanation.