返回私人会员时出错
Segfault when returning private member
我在调试代码时遇到问题。在某些Qt插槽中,我这样做:
UIElementInterface* interface = qobject_cast <UIElementInterface*>(sender());
下面这一行给了我一个分段错误:
QStringList data = interface->getSetDefData();
这不行
QString hello = interface->getHello();
UIElementInterface
内部getSetDefData()
的实现:
class UIElementInterface
{
public:
...
UIElementInterface(const QStringList& data) : m_setDefData(data)
{
std::cout << qPrintable(m_setDefData[0]) << std::endl; //everything as expected here..
}
QStringList getSetDefData(){return m_setDefData;} //gives seg fault
QString getHello(){return QString("Hello");} //works fine
private:
QStringList m_setDefData;
};
我将不胜感激:)
编辑根据我qobject_cast
投向CheckBox
的评论,这绝对是发送者(在崩溃的情况下),它是一个子类QCheckBox
。所以它肯定是QObject
(我也仔细检查了实现)。当我按照建议检查返回值时,结果是0
.
CheckBox* b = qobject_cast<CheckBox*>(sender());
if (b == 0)
{
std::cout << "Here we are" << std::endl;
}
所以这就是问题所在。我仍然需要弄清楚为什么会这样,但这可能会导致崩溃。
另一个编辑 打印出类名sender()->metaObject()->className()
揭露邪恶的根源:
QSignalMapper
结案:)
从UIElementInterface
类声明中可以清楚地看出,该类不是QObject
。关于qobject_cast
函数的Qt文档指出:
类 T 必须(直接或间接)继承 QObject 并且 使用 Q_OBJECT 宏声明。
因此,您不能将qobject_cast
与UIElementInterface
类一起使用。
相关文章:
- 访问者访问变体并返回不同类型时出错
- 从 lambda 表达式返回布尔值时出错
- 谷歌嘲笑!我的测试出错.默认情况下,呼叫将返回调用
- 在 c++ 中返回一维数组时出错
- 尝试返回指向 Visual Studio 中的动态数组的指针时出错C++
- 在返回另一个函数的函数中执行程序期间出错
- 在给定表达式的情况下返回对类型的引用时出错:“cond ?*这个 : 投掷()'
- 推导成员函数包装器的返回类型时出错
- 在 c++ 函数中返回 char* 时出错
- 将 (cin >> someVar) 的返回分配给 istream 变量时出错 C++
- 引用返回值时出错
- 我正在尝试创建一个方法,该方法使用指针算术返回一对,它是否会出错
- C++从构造函数返回值时出错
- 对向量进行操作后返回时出错
- 返回对自定义对象的引用时 Boost.Python 出错
- 返回私人会员时出错
- c++ MySql 连接器查询始终返回 true,即使出错也是如此
- 在C++中返回类对象时出错
- 返回 char* 出错,打印好,返回不好(c++)
- 尝试在模板 c++ 中返回变量时出错