'test' was not declared in this scope
'double AB::test(double, double)' should have been declared inside 'AB'
Seems like this might have something to do w/ my namespaces. I've tried
to include everything I thought relevant to this problem.
--- BN.h ---
namespace AB {
class BN
{
public:
friend double test(double a, double b);
};
}
--- BN.cc ---
// error on next line … 'double AB::test(double, double)' should have
been declared inside 'AB'
double AB::test(double a, double b)
{
return
};
--- AL.h ---
namespace AB {
class AL : public BL
{
public:
AL();
};
}
--- AL.cc ---
using namespace std;
// constructor
AB::AL::AL() : BL() {
// error on next line … 'test' was not declared in this scope
test();
};
In case the above looks strange, I've double checked for any typos, and
it's all right (left out forward declarations, headers, etc...). This
used to compile in XCode 2.
It's wrong because a friend function declaration just declares a function as
a friend, but it will never introduce a visible name into an enclosing scope
(the name is introduced, but it's *not* visible). Argument dependent lookup
is a special case, in which the function name introduced by that declaration
is visible in its namespace.
This means, you have to declare it yourself in AB before you define it
outside of it.
How do I declare this before I define it? I thought that's what I was
doing, declaring it within the namespace AB of the class BN, and of
course it's defined elsewhere.
Guess I still don't' understand about introducing a visible name into
an enclosing scope (which I thought it was).
Joe wrote:
// BN.h
namespace AB {
class BN
{
public:
friend double test(double a, double b);
};
double test(double a, double b);
}
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
iEYEARECAAYFAkrqv00ACgkQG6NzcAXitM9V7ACfQ+/KIsAkKsz297+btbV+5l8+
X1UAnApoL5M7za2hOup0WhXmoQ5UVQrJ
=nfwQ
-----END PGP SIGNATURE-----