Connecting Tech Pros Worldwide Help | Site Map

proper declaration for template link problem

Jeff Kish
Guest
 
Posts: n/a
#1: Oct 3 '06
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
Jeff Kish
Guest
 
Posts: n/a
#2: Oct 3 '06

re: proper declaration for template link problem


On Tue, 03 Oct 2006 13:39:41 -0400, Jeff Kish <jeff.kish@mro.comwrote:
Quote:
>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
Marcus Kwok
Guest
 
Posts: n/a
#3: Oct 3 '06

re: proper declaration for template link problem


Jeff Kish <jeff.kish@mro.comwrote:
Quote:
On Tue, 03 Oct 2006 13:39:41 -0400, Jeff Kish <jeff.kish@mro.comwrote:
Quote:
>>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
Closed Thread