On 30 Set, 02:15, "Victor Bazarov" <v.Abaza...@comAcast.netwrote:
Quote:
jduranco...@gmail.com wrote:
Quote:
[..]
template <class T>
class A<T>::B
{
public:
B(int a);
>
Quote:
friend bool operator ==<(const A<T>::B &b1, const A<T>::B &b2);
>
Quote:
private:
int aa;
B b;
>
Am I reading this right? An instance of your 'B' class contains
another instance of the same class, 'b'? Not gonna work.
>
Fix this first, then post the corrected code again.
>
And keep in mind that a member of a class template _is_ essentially
a template itself.
>
>
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask
I agree, in the sample, I've declared a recursive type that C++ is not
supporting. I've removed it, and I've improved the syntax (adding
typename as suggested, thanks). Now, the only error is the declaration
of a friend template function.
Improved source code:
#include <iostream>
template <typename T>
class A
{
public:
class B;
};
/* Example of template function */
template <typename T>
T add(T a, T b) {return a+b;}
template <typename T>
bool operator == (const typename A<T>::B &b1,
const typename A<T>::B &b2);
template <typename T>
class A<T>::B
{
public:
B(int a);
friend bool operator == <(const typename A<T>::B &b1,
const typename A<T>::B &b2); // Line 29
private:
int aa;
};
template <typename T>
A<T>::B::B(int a):
aa(a)
{}
template <typename T>
bool operator == (const typename A<T>::B& b1,
const typename A<T>::B& b2)
{
return b1.aa == b2.aa;
}
class C {};
int main()
{
A<C>::B b1(4), b2(5);
bool res = (b1 == b2); // Line 57
return 0;
}
The message error from compiler is:
nested.cpp: In instantiation of 'A<C>::B':
nested.cpp:55: instantiated from here
nested.cpp:29: error: template-id 'operator==<>' for 'bool
operator==(const A<C>::B&, const A<C>::B&)' does not match any
template declaration
nested.cpp: In function 'int main()':
nested.cpp:57: error: no match for 'operator==' in 'b1 == b2'
I've googled a litle abut how declare template functions as friends,
and It looks likes that the current syntax is right.
Thanks and Best Regads,
Joaquim Duran