qq_33555452 2016-04-02 14:35 采纳率: 100%
浏览 1251

为什么这个程序不能正确运行? 求大家帮帮忙

 #include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include"HasPtr.h"
//#include"TreeNode.h"
using namespace std;
//13.27  30 31编写自己版本的使用引用计数的HasPtr
int main(int argc, char *argv[])
{
    //HasPtr p;
    //p.Print();
    //HasPtr p1 = p;
    //p1.Print();
    //p.Print();
    //HasPtr p2(p);
    //p.Print();
    //p2.Print();
    //HasPtr p3("my life");// 交换成功
    //HasPtr p4("you life");
    ////cout<<p4.ps_str();
    //Swap(p3, p4);
    vector<HasPtr> vec_has;
    string str;
    while (cin >> str)
    {
        HasPtr temp1;
        temp1.ps_str()=str;
        cout<<temp1.ps_str();
        vec_has.push_back(temp1);
    }
    stable_sort(vec_has.begin(), vec_has.end());
    for (auto i : vec_has)
        cout << i.ps_str() << "  ";
    system("pause");
}
下面的是这个文件:
#ifndef HasPtr_H
#define HasPtr_H
#include<string>
#include<iostream>
#include<vector>
using namespace std;
class HasPtr
{
    friend void Swap(HasPtr &p, HasPtr &q);
    friend bool operator<(const HasPtr &c, const HasPtr &d)
    {
        return *c.ps < *d.ps;
    }
public:
    //构造函数
    HasPtr(const  string &s=string()):ps(new string(s)),i(0),use(new size_t(1)){}
    //拷贝构造函数
    HasPtr(const HasPtr &p) :ps(p.ps), i(p.i), use(p.use) { ++*use; }
    HasPtr &operator=(const HasPtr&)  ;
    string ps_str() { return (*ps); }
    ~HasPtr();
    void Print();   
private:
    string *ps;
    int i;
    size_t *use;//用来记录有多少个对象共享use
};
HasPtr & HasPtr::operator=(const HasPtr &rhs)
{
    ++*rhs.use;
    if (--*use == 0)
    {
        delete ps;
        delete use;
    }
    ps = rhs.ps;//将数据rhs拷贝到本对象
    i = rhs.i;
    use = rhs.use;
    return *this;
}
HasPtr::~HasPtr()
{
    if (--*use == 0)
    {
        delete ps;
        delete use;
    }
}
void HasPtr::Print()
{
    cout << *use << endl;
}
void Swap(HasPtr &p, HasPtr &q)
{
    cout << *p.ps << *q.ps << endl;
    HasPtr temp;
    temp.ps = new string(*(p.ps));
    temp.i = p.i;
    delete p.ps;
    p.ps = new string(*(q.ps));
    p.i = q.i;
    q = temp;
    cout << *p.ps << *q.ps << endl;
}
#endif
  • 写回答

2条回答

  • 咖啡不加盐 2016-04-02 15:13
    关注

    编译过了没?说清楚输出是哪里有问题了?

    评论

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题