Qt非静态成员引用必须与特定对象相关
问题描述:
我有一个从文件加载数据后调用emitResult的函数。Qt非静态成员引用必须与特定对象相关
bool IpResolver::ResolvedInfo::load(QTextStream &in)
{
ResolvedInfo rf;
while (!in.atEnd())
{
QString line = in.readLine();
QStringList list = line.split(' ');
list[0] = rf.country;
list[1] = rf.ip;
if (rf.ip.isEmpty() == false)
{
emitResult(rf);
}
}
}
因此,这里是emitResult声明:
private:
void emitResult(const ResolvedInfo &data);
,这让我这个错误: 的非静态成员引用必须是相对于特定对象 不知道该怎么办。
答
emitResult
是我设想的一个非静态成员函数IpResolver
。然而你没有任何实例,从子类IpResolver::ResolvedInfo
中调用它。请记住,仅仅因为ResolvedInfo
是一个子类,并没有以任何其他方式使它变得特别。具体而言,如果它不包含对父类实例的引用,它将无法按照您期望的方式工作。
一般有两种方法可以解决你的问题:
你可以传递一个参考IpResolver
到ResolvedInfo
构造,并保留在ResolvedInfo
实例的引用:
class IpResolver {
class ResolvedInfo {
IpResolver & q;
public:
ResolvedInfo(IpResolver & q) : q(q) { ... }
static bool load(QTextStream &in) {
ResolvedInfo rf;
while (!in.atEnd())
{
QString line = in.readLine();
QStringList list = line.split(' ');
list[0] = rf.country;
list[1] = rf.ip;
if (!rf.ip.isEmpty())
q.emitResult(rf);
}
}
};
void emitResult(const ResolvedInfo &);
...
};
也可以使emitResult
一个静态方法:
class IpResolver {
...
static void emitResult(const ResolvedInfo &);
};
你能否给我们提供关于'load() '功能? –