Я использую Visual Studio, и я работаю над C++ код, который работает, как это в классе A
:dllexport методы статического класса
class A
{
public:
//......
static void foo();
};
класса B
экспортируется:
class __declspec(dllexport) B
{
public:
//...
void bar()
{
A::foo();
}
};
A
и B
являются скомпилирован в AB.dll (и AB.lib). Сейчас основная программа:
int main()
{
B b;
b.bar();
return 0;
}
When compiling the main program and linking it to AB.lib,
it complains about the A::foo() as unresolved external symbol
(in this case A::foo is a static function).
Do I need to somehow export A::foo() or could it be that
I introduce errors somewhere? Any help is appreciated.
Modified:
1) Sorry for the type, it should be dllexport, not dllimport
2) in my actual project, the implementation is in .cpp files. They are not inline functions.
Thanks.
Ответы на http://stackoverflow.com/questions/35048940/what-does-this-c-class-declaration-mean могут быть полезны. –
Поместите реализацию 'B :: bar' в исходный файл, не экспортируйте его. Если 'A' используется только в источнике' B', его не нужно экспортировать. –
Вы даете компоновщику два пути для разрешения B :: bar(). Он может использовать определение из файла .h или использовать его в AB.lib. Это предрешено, он всегда будет похож на файл .h, поскольку он присутствует в файле .obj. Теперь нужно разрешить A :: foo(). Неудачный кит, AB.lib его не имеет. Вы должны удалить определение в файле .h и перенести его в файл .cpp, чтобы компилятор не мог его использовать. –