l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
April 21: Google Glass
Next Installfest:
TBD
Latest News:
Mar. 18: Google Glass at LUGOD's April meeting
Page last updated:
2006 Feb 02 14:01

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] grokking g++ errors
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [vox-tech] grokking g++ errors



On Thu, Feb 02, 2006 at 02:59:35PM -0500, Peter Jay Salzman wrote:
> On Thu 02 Feb 06, 10:21 AM, Jeff Newmiller <jdnewmil@dcn.davis.ca.us> said:
> > 
> > You didn't ask for assistance in actually troubleshooting this problem, but
> > templates traditionally must be defined before they are instantiated in the
> > source.  It is possible that newer compilers can handle definition after
> > instantiation, but I don't know how they do it.
> 
> Sorry for being so dense, but I'm just now starting to try to really learn
> function and class templates.
> 
> Do you mean that the template function definition must be seen before the
> any calls to the function is made (I assume that's the instantiation)?
> 
> I guess what I'm asking is -- is the template function's prototype not
> enough?  The actual definition must be seen before any calls to the function
> are made?

IIRC this should not be true (though I'll point out that in your sample
code, no such prototype has been provided); however, for many
implementations, it is. You may also need to explicitly tell g++ to
instantiate that template into an actual function definition. Something
like:

  template void split(const string &str,
                      back_insert_iterator<vector<string>>);

but that may not be necessary.

Realize that defining a function /template/ does not define any
function, only a template. That's what /instantiating/ the template
does. It makes it easy on the compiler if the function template's
definition is in scope at the time you implicitly or explicitly
instantiate it, and some compilers may require this, though the C++
stnadard does not (only that it's in the same "translation unit"
somewhere).

I'd be happy to help you debug the problem if you want to give me access
to the actual code.

-- 
HTH,

Micah J. Cowan
micah@cowan.name
_______________________________________________
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
EDGE Tech Corp.
For donating some give-aways for our meetings.