QList append问题

永远的魔术1号 2012-07-27 09:40:20
123.h中
class tmp
{
QString a;
QString b;
}
a.h中
public:
QList<tmp> f;

a.cpp中
tmp *q = new tmp;

q.a = "123";
q.b = "324";

f.append(*q);


然后f中却显示f中的内容为bad ptr,怎么回事啊?有谁知道
...全文
2026 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdwx 2012-08-10
  • 打赏
  • 举报
回复
楼主就不能写一个测试程序,打包发上来。
class tmp
{
QString a;
QString b;
}
要是楼主没写错,a和b是私有的,根本后面的

Tmp *q = new Tmp();

q->a = "123";
q->b = "324";
就没办法通过编译。
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

楼主就不能写一个测试程序,打包发上来。
class tmp
{
QString a;
QString b;
}
要是楼主没写错,a和b是私有的,根本后面的

Tmp *q = new Tmp();

q->a = "123";
q->b = "324";
就没办法通过编译。
[/Quote]

写错了,a和b是public
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

我也碰上同样的问题了
请问楼主解决了吗?
我的qq是46436323
可以一起讨论
[/Quote]


没解决呢,你呢研究的怎么样了
百神_yqb 2012-08-10
  • 打赏
  • 举报
回复
我也碰上同样的问题了
请问楼主解决了吗?
我的qq是46436323
可以一起讨论
xiebin133 2012-08-06
  • 打赏
  • 举报
回复
你的问题在我们的机器上不会出现。。你建立一个新工程,就只有这几句,其他的多没有的看看。
  • 打赏
  • 举报
回复
难道再没有人遇见跟我一样的问题吗???求教啊
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

我觉得把那二句改为
q->a = "123";
q->b = "324";
就成了。
代码本身没问题。有时候调试不好使,你要打出来看看。
但是LZ的代码设计上很不好。因为你的动态内存,后面没法delete了。
要么把QList<tmp> f; 改为QList<tmp *> f; 最后f.append(q);
或者把tmp *q改为 tmp q. 然后f.append(q); 就……
[/Quote]

你没有看之前的帖子吗?我已经说了,这个是发帖时手误,VS里面自动判断是否是指针,是指针的话输入.也会变成->,所以不是这的问题
evangelinelm 2012-07-31
  • 打赏
  • 举报
回复
我觉得把那二句改为
q->a = "123";
q->b = "324";
就成了。
代码本身没问题。有时候调试不好使,你要打出来看看。
但是LZ的代码设计上很不好。因为你的动态内存,后面没法delete了。
要么把QList<tmp> f; 改为QList<tmp *> f; 最后f.append(q);
或者把tmp *q改为 tmp q. 然后f.append(q); 就可以了。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

然后f中却显示f中的内容为bad ptr,怎么回事啊?
bad ptr在哪里显示的?调试的时候?要用QDebug输出f,调试有时候不好使。
[/Quote]

我用VS调试的,查看结果很容易吧
xiebin133 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
123.h中
class tmp
{
QString a;
QString b;
}
a.h中
public:
QList<tmp> f;

a.cpp中
tmp *q = new tmp;

q.a = "123";
q.b = "324";

f.append(*q);
就你这些代码真能通过编译?
[/Quote]

别用tmp *q = new tmp;直接用tmp q;看看。
jdwx 2012-07-30
  • 打赏
  • 举报
回复
123.h中
class tmp
{
QString a;
QString b;
}
a.h中
public:
QList<tmp> f;

a.cpp中
tmp *q = new tmp;

q.a = "123";
q.b = "324";

f.append(*q);
就你这些代码真能通过编译?

jdwx 2012-07-30
  • 打赏
  • 举报
回复
然后f中却显示f中的内容为bad ptr,怎么回事啊?
bad ptr在哪里显示的?调试的时候?要用QDebug输出f,调试有时候不好使。
xiebin133 2012-07-30
  • 打赏
  • 举报
回复
QList <tmp *>看行不行。
jdwx 2012-07-30
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

我测试了你的代码,编译没有出现任何提示,运行也没有出现任何错误,我把代码贴出来,你看看
<<main.cpp>>

#include <QList>
#include <QString>

class Tmp
{
public:
QString a;
QString b;
};


int main(int argc, char *argv[])
{
……
[/Quote]
你的代码和他的不一样,楼主那些根本不能用。
baiyqukq 2012-07-30
  • 打赏
  • 举报
回复
我测试了你的代码,编译没有出现任何提示,运行也没有出现任何错误,我把代码贴出来,你看看
<<main.cpp>>

#include <QList>
#include <QString>

class Tmp
{
public:
QString a;
QString b;
};


int main(int argc, char *argv[])
{

QList<Tmp> f;

Tmp *q = new Tmp();

q->a = "123";
q->b = "324";

f.append(*q);
}
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

容器类里放的东西要满足:
1.一个默认构造函数。
2.一个复制构造函数(拷贝构造函数)。
3.一个重载运算符"="的赋值运算。
你的tmp类满足这些关系么?
[/Quote]

我最后试着给tmp添加了一个构造函数,把成员初始化了一下,还是不行。能说的再详细些吗?
chenzhp 2012-07-27
  • 打赏
  • 举报
回复
   Tmp *q = new Tmp;

q->a = "123";
q->b = "324";

f.append(*q);
qDebug()<<f.at(0).a;


我打出来,a的值没问题啊。挺好的呢。
你全部代码贴出了看看
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
a.cpp中
tmp *q = new tmp;

q.a = "123";
q.b = "324";
上面两行编译器没有意见?

f.append(*q);
[/Quote]

哦 写错了,应该是->,这段代码是直接写的,不是复制的源代码,不好意思,这下看看哪里有问题
jdwx 2012-07-27
  • 打赏
  • 举报
回复
a.cpp中
tmp *q = new tmp;

q.a = "123";
q.b = "324";
上面两行编译器没有意见?

f.append(*q);
haltwang 2012-07-27
  • 打赏
  • 举报
回复
容器类里放的东西要满足:
1.一个默认构造函数。
2.一个复制构造函数(拷贝构造函数)。
3.一个重载运算符"="的赋值运算。
你的tmp类满足这些关系么?

21,491

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧