Compilation error

A

Adrian Hawryluk

I'm implementing an algorithm that will fill a container with the same
item. However, my object creation function isn't working correctly.
This should auto detect the types based on the parameters it was passed.
But I must be missing something as it will not compile.

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t> make_fill(dest_t& dest, src_t& src) //< error
{
return fill<dest_t, src_t>(src);
}

.../arrayTest1.h:68: error: expected init-declarator before '<' token
.../arrayTest1.h:68: error: expected `;' before '<' token

Thanks in advance.


Adrian
--
_____________________________________________________________________
\/Adrian_Hawryluk BSc. - Specialties: UML, OOPD, Real-Time Systems\/
\ My newsgroup writings are licensed under the Creative Commons /
\ Attribution-Noncommercial-Share Alike 3.0 License /
\_____[http://creativecommons.org/licenses/by-nc-sa/3.0/]_____/
\/______[blog:__http://adrians-musings.blogspot.com/]______\/
 
A

Adrian Hawryluk

Adrian said:
I'm implementing an algorithm that will fill a container with the same
item. However, my object creation function isn't working correctly.
This should auto detect the types based on the parameters it was passed.
But I must be missing something as it will not compile.

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t> make_fill(dest_t& dest, src_t& src) //< error
{
return fill<dest_t, src_t>(src);
}

../arrayTest1.h:68: error: expected init-declarator before '<' token
../arrayTest1.h:68: error: expected `;' before '<' token

Thanks in advance.

Oh, here is the fill class that goes with it:

template <typename dest_t, typename src_t>
class fill
{
src_t const & value;
public:
fill(src_t const & value)
: value(value) {}

fill(fill const & f) : value(f.value) {}

void operator()(dest_t& dest)
{
// copy here
}
};


Adrian
--
_____________________________________________________________________
\/Adrian_Hawryluk BSc. - Specialties: UML, OOPD, Real-Time Systems\/
\ My newsgroup writings are licensed under the Creative Commons /
\ Attribution-Noncommercial-Share Alike 3.0 License /
\_____[http://creativecommons.org/licenses/by-nc-sa/3.0/]_____/
\/______[blog:__http://adrians-musings.blogspot.com/]______\/
 
R

red floyd

Adrian said:
I'm implementing an algorithm that will fill a container with the same
item. However, my object creation function isn't working correctly.
This should auto detect the types based on the parameters it was passed.
But I must be missing something as it will not compile.

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t> make_fill(dest_t& dest, src_t& src) //< error
{
return fill<dest_t, src_t>(src);
}

../arrayTest1.h:68: error: expected init-declarator before '<' token
../arrayTest1.h:68: error: expected `;' before '<' token

Look at the declaration immediately before the make_fill declaration.
Are you by any chance missing a semicolon?
 
A

Adrian Hawryluk

red said:
Look at the declaration immediately before the make_fill declaration.
Are you by any chance missing a semicolon?

Checked that already. The fill class that I posted is directly before
this function.


Adrian
--
_____________________________________________________________________
\/Adrian_Hawryluk BSc. - Specialties: UML, OOPD, Real-Time Systems\/
\ My newsgroup writings are licensed under the Creative Commons /
\ Attribution-Noncommercial-Share Alike 3.0 License /
\_____[http://creativecommons.org/licenses/by-nc-sa/3.0/]_____/
\/______[blog:__http://adrians-musings.blogspot.com/]______\/
 
A

Adrian Hawryluk

Adrian said:
I'm implementing an algorithm that will fill a container with the same
item. However, my object creation function isn't working correctly.
This should auto detect the types based on the parameters it was passed.
But I must be missing something as it will not compile.

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t> make_fill(dest_t& dest, src_t& src) //< error
{
return fill<dest_t, src_t>(src);
}

../arrayTest1.h:68: error: expected init-declarator before '<' token
../arrayTest1.h:68: error: expected `;' before '<' token

Thanks in advance.


Adrian

I don't get it. Under VC++ 6.0 it works (and that doesn't accept a
whole lot ;) lol jk) but g++ 3.4.4 (cygming special, gdc 0.12, using dmd
0.125), it chokes. Here is my test code that I transfered between the
two compilers. Nothing else in the file but this, so the only thing
that would go wrong is a link error because there is no main() function.

--------------------------------------------------------------------------
#include <vector>
#include <algorithm>
using namespace std;
template <typename dest_t, typename src_t>
class fill
{
src_t const & value;
public:
fill(src_t const & value)
: value(value) {}

void operator()(dest_t& dest)
{
}
};

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t const> make_fill(dest_t& dest, src_t& src)
{
return fill<dest_t, src_t const>(src);
}

int main2(int argc, char* argv[])
{

vector<int> aa;
aa.push_back(3);
aa.push_back(5);
int b = 3;
for_each(aa.begin(), aa.end(), make_fill(*aa.begin(), b));

return 0;
}
--------------------------------------------------------------------------
This is driving me nuts.


Adrian
--
_____________________________________________________________________
\/Adrian_Hawryluk BSc. - Specialties: UML, OOPD, Real-Time Systems\/
\ My newsgroup writings are licensed under the Creative Commons /
\ Attribution-Noncommercial-Share Alike 3.0 License /
\_____[http://creativecommons.org/licenses/by-nc-sa/3.0/]_____/
\/______[blog:__http://adrians-musings.blogspot.com/]______\/
 
R

red floyd

Adrian said:
Adrian said:
I'm implementing an algorithm that will fill a container with the same
item. However, my object creation function isn't working correctly.
This should auto detect the types based on the parameters it was
passed. But I must be missing something as it will not compile.

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t> make_fill(dest_t& dest, src_t& src) //< error
{
return fill<dest_t, src_t>(src);
}

../arrayTest1.h:68: error: expected init-declarator before '<' token
../arrayTest1.h:68: error: expected `;' before '<' token

Thanks in advance.


Adrian

I don't get it. Under VC++ 6.0 it works (and that doesn't accept a
whole lot ;) lol jk) but g++ 3.4.4 (cygming special, gdc 0.12, using dmd
0.125), it chokes. Here is my test code that I transfered between the
two compilers. Nothing else in the file but this, so the only thing
that would go wrong is a link error because there is no main() function.

--------------------------------------------------------------------------
#include <vector>
#include <algorithm>
using namespace std;
template <typename dest_t, typename src_t>
class fill
{
src_t const & value;
public:
fill(src_t const & value)
: value(value) {}

void operator()(dest_t& dest)
{
}
};

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t const> make_fill(dest_t& dest, src_t& src)
{
return fill<dest_t, src_t const>(src);
}

int main2(int argc, char* argv[])
{

vector<int> aa;
aa.push_back(3);
aa.push_back(5);
int b = 3;
for_each(aa.begin(), aa.end(), make_fill(*aa.begin(), b));

return 0;
}
--------------------------------------------------------------------------

Don't know if it makes much of a diff, but change the second parameter
of make_fill to src_t const& src.
 
A

Alf P. Steinbach

* Adrian Hawryluk:
#include <vector>
#include <algorithm>
using namespace std;
template <typename dest_t, typename src_t>
class fill
{
src_t const & value;
public:
fill(src_t const & value)
: value(value) {}

void operator()(dest_t& dest)
{
}
};

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t const> make_fill(dest_t& dest, src_t& src)
{
return fill<dest_t, src_t const>(src);
}

int main2(int argc, char* argv[])
{

vector<int> aa;
aa.push_back(3);
aa.push_back(5);
int b = 3;
for_each(aa.begin(), aa.end(), make_fill(*aa.begin(), b));

return 0;
}

'fill' is a standard library template function.
 
A

Adrian Hawryluk

Alf said:
* Adrian Hawryluk:
#include <vector>
#include <algorithm>
using namespace std;
template <typename dest_t, typename src_t>
class fill
{
src_t const & value;
public:
fill(src_t const & value)
: value(value) {}
void operator()(dest_t& dest)
{
}
};

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t const> make_fill(dest_t& dest, src_t& src)
{
return fill<dest_t, src_t const>(src);
}

int main2(int argc, char* argv[])
{
vector<int> aa;
aa.push_back(3);
aa.push_back(5);
int b = 3;
for_each(aa.begin(), aa.end(), make_fill(*aa.begin(), b));

return 0;
}

'fill' is a standard library template function.

Yeah *sigh*, I just figured that out. I wish that the error message
came up on the class, and not on the function though.


Adrian
--
_____________________________________________________________________
\/Adrian_Hawryluk BSc. - Specialties: UML, OOPD, Real-Time Systems\/
\ My newsgroup writings are licensed under the Creative Commons /
\ Attribution-Noncommercial-Share Alike 3.0 License /
\_____[http://creativecommons.org/licenses/by-nc-sa/3.0/]_____/
\/______[blog:__http://adrians-musings.blogspot.com/]______\/
 
A

Adrian Hawryluk

Adrian said:
Alf said:
* Adrian Hawryluk:
#include <vector>
#include <algorithm>
using namespace std;
template <typename dest_t, typename src_t>
class fill
{
src_t const & value;
public:
fill(src_t const & value)
: value(value) {}
void operator()(dest_t& dest)
{
}
};

template<typename dest_t, typename src_t>
inline fill<dest_t, src_t const> make_fill(dest_t& dest, src_t& src)
{
return fill<dest_t, src_t const>(src);
}

int main2(int argc, char* argv[])
{
vector<int> aa;
aa.push_back(3);
aa.push_back(5);
int b = 3;
for_each(aa.begin(), aa.end(), make_fill(*aa.begin(), b));

return 0;
}

'fill' is a standard library template function.

Yeah *sigh*, I just figured that out. I wish that the error message
came up on the class, and not on the function though.

BTW, thanks for the help.


Adrian
--
_____________________________________________________________________
\/Adrian_Hawryluk BSc. - Specialties: UML, OOPD, Real-Time Systems\/
\ My newsgroup writings are licensed under the Creative Commons /
\ Attribution-Noncommercial-Share Alike 3.0 License /
\_____[http://creativecommons.org/licenses/by-nc-sa/3.0/]_____/
\/______[blog:__http://adrians-musings.blogspot.com/]______\/
 
A

Adrian Hawryluk

Adrian said:
Yeah *sigh*, I just figured that out. I wish that the error message
came up on the class, and not on the function though.


Adrian

BTW, thanks for the help.


Adrian
--
_____________________________________________________________________
\/Adrian_Hawryluk BSc. - Specialties: UML, OOPD, Real-Time Systems\/
\ My newsgroup writings are licensed under the Creative Commons /
\ Attribution-Noncommercial-Share Alike 3.0 License /
\_____[http://creativecommons.org/licenses/by-nc-sa/3.0/]_____/
\/______[blog:__http://adrians-musings.blogspot.com/]______\/
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,997
Messages
2,570,240
Members
46,830
Latest member
HeleneMull

Latest Threads

Top