Я использую shared_ptr для абстрактного класса ABC.Класс ABCImpl является реализацией ABC.abc_ptr - это shared_ptr , указывающий на объекты ABCImpl.В вызывающей функции abc_ptr вызовет одну из функций-членов (func_in_ABC) в классе ABC.Компиляция прошла успешно.Но когда я использую nm или objdump, я мог видеть только символ abc_ptr.Для функции func_in_ABC () в функции вызывающей стороны не отображается символ.
Кто-нибудь знает, почему или как я получаю вывод для символа функции func_in_ABC () в функции вызывающей программы?
код выглядит следующим образом: В ABC.h:
#include <boost/shared_ptr.hpp>
class ABC
{
public:
virtual void func_in_ABC(const int param) = 0;
};
typedef boost::shared_ptr<ABC> ABCPtr;
ABCPtr get_ABC_ptr();
В ABCImpl.h:
#include "ABC.h"
class ABCImpl : public
{
public:
ABCImpl() {}
void func_in_ABC(const int param);
private:
int data;
};
В ABCImpl.cpp:
#include "ABCImpl.h"
ABCPtr get_ABC_ptr()
{
return ABCPtr(new ABCImpl());
}
void ABCImpl::func_in_ABC(const int param)
{
data = param;
}
В функции вызоваD.cpp:
#include "D.h"
#include "ABC.h"
void D::call_ABC()
{
ABCPtr abc_ptr = get_ABC_ptr();
abc_ptr->func_in_ABC(100);
}
Вывод для Do из nm:
U _Unwind_Resume
U get_ABC_ptr()
0000000000000000 T D::call_ABC()
0000000000000000 W boost::shared_ptr<ABC>::operator->() const
0000000000000000 r boost::shared_ptr<ABC>::operator->() const::__PRETTY_FUNCTION__
U __assert_fail
U __gxx_personality_v0
Если я изменю определение func_in_ABC в ABC.h, компиляция для D.cpp не удастся.Я думаю, что он проверит определение класса ABC при компиляции Do Но почему я не могу найти символ в вызывающей программе для сопоставления с определением в ABC?