By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
445,655 Members | 1,005 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 445,655 IT Pros & Developers. It's quick & easy.

proper declaration for template link problem

P: n/a
Hi.

I'm stuck using a very old c++ compiler, and I'm trying to figure out how to
add a declaration so that an algorithm can be used. This is really a compiler
specific problem, however I was hoping someone could suggest the proper
declaration to put in place to solve it.

If someone can suggest a solution I'd really appreciate it.

Here is the scenario:

I have an object, and I use a vector and vector Iterator with it.

the old build system I'm using (borland 5.02) is set up
with the projects I'm stuck with to generate external references to all
template instances.

This requires that I put all template instances into a standalone cpp file
that is built differently so that they are all resolved to that cpp.

this works fine except when I add a call to:
sort(myvector.begin(),myvector.end()) or
find(myvector.begin(),myvector.end(),anObject)

I get unresolved linker errors.

Now I figure I need to add the sort and find functions to the .cpp file
that resolves all the other template components like vector.size() etc.

I can't figure out what to add though, to the file.

I tried adding things like:
std::find(MAnnotation*,MAnnotation*, const MAnnotation&);

because of the error description which said:
Error: Error: Unresolved external 'std::sort(MAnnotation*,MAnnotation*)'
referenced from module STLSortVectortester.cpp

but it did not resolve the link problem.

I appreciate any assistance.

Thanks
Jeff Kish
Oct 3 '06 #1
Share this Question
Share on Google+
2 Replies


P: n/a
On Tue, 03 Oct 2006 13:39:41 -0400, Jeff Kish <je*******@mro.comwrote:
>Hi.

I'm stuck using a very old c++ compiler, and I'm trying to figure out how to
add a declaration so that an algorithm can be used. This is really a compiler
specific problem, however I was hoping someone could suggest the proper
declaration to put in place to solve it.

If someone can suggest a solution I'd really appreciate it.

Here is the scenario:

I have an object, and I use a vector and vector Iterator with it.

the old build system I'm using (borland 5.02) is set up
with the projects I'm stuck with to generate external references to all
template instances.

This requires that I put all template instances into a standalone cpp file
that is built differently so that they are all resolved to that cpp.

this works fine except when I add a call to:
sort(myvector.begin(),myvector.end()) or
find(myvector.begin(),myvector.end(),anObject)

I get unresolved linker errors.

Now I figure I need to add the sort and find functions to the .cpp file
that resolves all the other template components like vector.size() etc.

I can't figure out what to add though, to the file.

I tried adding things like:
std::find(MAnnotation*,MAnnotation*, const MAnnotation&);

because of the error description which said:
Error: Error: Unresolved external 'std::sort(MAnnotation*,MAnnotation*)'
referenced from module STLSortVectortester.cpp

but it did not resolve the link problem.

I appreciate any assistance.

Thanks
Jeff Kish
I guess I'm tired.. this worked.
MAnnotation* std::find(MAnnotation*,MAnnotation*, const MAnnotation&);
I forgot that the return types are implictly int if I don't specify them which
was wrong.
Jeff Kish
Oct 3 '06 #2

P: n/a
Jeff Kish <je*******@mro.comwrote:
On Tue, 03 Oct 2006 13:39:41 -0400, Jeff Kish <je*******@mro.comwrote:
>>I'm stuck using a very old c++ compiler, and I'm trying to figure out how to
add a declaration so that an algorithm can be used. This is really a compiler
specific problem, however I was hoping someone could suggest the proper
declaration to put in place to solve it.

I tried adding things like:
std::find(MAnnotation*,MAnnotation*, const MAnnotation&);

because of the error description which said:
Error: Error: Unresolved external 'std::sort(MAnnotation*,MAnnotation*)'
referenced from module STLSortVectortester.cpp

but it did not resolve the link problem.

I guess I'm tired.. this worked.
MAnnotation* std::find(MAnnotation*,MAnnotation*, const MAnnotation&);
I forgot that the return types are implictly int if I don't specify them which
was wrong.
Maybe this is true since you must use an old compiler, but IIRC in
current C++ implicit return type is no longer supported... unfortunately
VS .NET 2003 SP1 has no qualms about compiling this code with all
warnings enabled; in fact, I couldn't even get it to warn me about
implicit int (if it did, it was buried underneath a bunch of warnings
for standard headers); of course, Comeau online gives the error:
explicit type is missing ("int" assumed).
#include <iostream>

f()
{
return 42;
}

int main()
{
f();
}

--
Marcus Kwok
Replace 'invalid' with 'net' to reply
Oct 3 '06 #3

This discussion thread is closed

Replies have been disabled for this discussion.