Re: function without a definition
On 24/10/09 17:38, thomas wrote:
//-----------------------------------------------------------
#include<iostream>
#include<cstring>
using namespace std;
class B1{
public:
virtual void fun() = 0;
};
class B2{
public:
void fun();
};
class A:public B1, private B2{
public:
A(){
B1::fun();
B2::fun();
}
};
int main(){}
//-------------------------------------------
The above code links well but B1::fun() and B2::fun() are not defined.
//----------------------------------------------
#include<iostream>
#include<cstring>
using namespace std;
class B2{
public:
B2(){}
void fun();
};
int main(){
B2 b;
b.fun();
}
//---------------------------------------
In this case, the func() definition miss causes a link error.
Any explanation?
This is due to the way linkers work. Linkers resolve symbols (functions
and objects) that are actually used (and not inlined). In the first case
A::A() is not being used by main(), so that the linker does not need to
resolve it. If it were used, the linker would resolve A::A() and then
proceed to resolve symbols that are being used by A::A() and fail
because there are no definitions for functions B1::fun() and B2::fun()
provided.
In the second case main() does use B2::fun() which needs to be resolved
but there is no definition of B2::fun() provided, therefore linking fails.
--
Max