我有一个问题,将对象传递给Qt插件,当尝试使用const成员函数获取其成员时,我得到符号查找错误。例如:
这是在Qt应用程序中:
class A{
int a,b,c;
};
class B{
public:
const QList<A*>* a() const { return m_a; }
private:
QList<A*>* m_a;
};
class C{
public:
const B* b() const { return m_b; }
private:
B* m_b;
};
这是在QtPlugin:
中plugin.h
#include "a.h"
#include "b.h"
#include "c.h"
//....
plugin.cpp
void Plugin::somefunc(C* c)
{
qDebug() << c->b()->a()->count();
}
如果我从Qt应用程序调用插件的somefunc(),我会得到符号查找错误:
symbol lookup error ... plugin.so undefined symbol _ZNK5b6a
但是如果我将B和C类成员放入公共领域,它可以使用:
qDebug() << c->m_b->m_a->count();
有没有人有类似的问题或知道如何解决这个问题?感谢。
答案 0 :(得分:1)
默认情况下,类成员是私有的。 B::a()
和C::b()
是私有的。为了能够从Plugin::somefunc()
调用这些成员函数,您需要明确公开它们。
答案 1 :(得分:1)
这个“问题”有两种解决方案。
我在网上找不到类似的问题,从而得出了这个答案。也许问题很模糊,抱歉。谢谢你的回答。这个答案可供将来参考。