0

Hi there,

I am trying to write a C++ app using Dev-C++ 4.9.9.2. The app is supposed to read in a txt file and then use templates to read in the files and swap data that gets populated in a ptr array. The errors are:

[Linker error] undefined reference to `SalaryCompare::makeList(std::basic_ifstream<char, std::char_traits<char> >&, voter**)'
[Linker error] undefined reference to `void SalaryCompare::swap<voter>(voter**, int, int)'
ld returned 1 exit status
C:\Users\dwilmes\Desktop\project2\Makefile.win [Build Error] [Project2.exe] Error 1

thanks for any ideas or answers.

Daniel

Attachments
3
Contributors
5
Replies
6
Views
8 Years
Discussion Span
Last Post by deerowbear
0

triple check that your prototypes match your definitions, and that your calls to the functions agree with parameter lists.

0

ALL your template functions in the cpp file need to be in the .h file.

When you instance a template with a type, the compiler needs all the template code to generate the appropriate type-specific instances of those functions.

0

in my .h file i have:

template<class T> void swap(T *[], int, int);

my implementation is:
template<class T>
void SalaryCompare::swap(T *array2swap[], int x, int y) {
    T temp = array2swap[x];
    array2swap[x] = array2swap[y];
    array2swap[y] = temp;
}

my call is:

comp_app->swap<voter>(voter_array, 0, (voteCount-1));

They seem to agree. Is there something that isn't correct?

thanks daniel

0

Like I said, at what point in your compilation steps did the compiler generate the code for swap<voter>

Was it when it compiled salarycompare.cpp - doubtful, it doesn't know what a voter is.
Was it when it compiled main.cpp - again no, the actual template code isn't in view (only the class in the .h file).

0

got it to work, put the template fun in the .h file. That seemed to at least get it to compile.

thanks daniel

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.