Я пишу разделяемую библиотеку с C ++ под Ubuntu. Исходный код содержит два файла: ClassA.h и ClassA.cpp. Ниже приведены части содержимого:
ClassA.h:
namespace calss_a{
class ClassA{
public:
...
void foo(int nBlockIndex);
...
}
}
ClassA.h:
namespace calss_a{
...
void classA::foo(int nBlockIndex){printf("....");}
...
}
Скомпилированный файл .so из вышеуказанных исходных кодов используется в test.cpp следующим образом:
...
class_a::ClassA * ptr = new class_a::ClassA();
...
ptr->foo(0);
...
Однако при запуске исполняемой сборки из test.cpp возникает следующая ошибка:
ошибка поиска символа: / home / hzhu / test: неопределенный символ: _ZN16class_a15ClassA16fooEj
Но если я изменю в ClassA.cpp и ClassA.h тип аргумента foo () "nBlockIndex" с "int" на "unsigned in" и перекомпилирую файл .so, проблема исчезнет. В следующем эксперименте тип аргумента «nBlockIndex» по-прежнему определяется как «int», но в test.cpp я называю «foo» следующим образом:
ptr->foo(1); //pass 1 instead of 0
тогда и проблема исчезнет.
Может кто-нибудь сказать мне, что здесь происходит?
Спасибо.