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

问题描述

为什么这个程序不能正确运行? 求大家帮帮忙
 #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

解决方案

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

解决方案二:

不能输出是因为你的ps_str()函数有问题,返回一个string对象然后赋值给它,楼主觉得有什么用?
要传string的指针回去,然后才能正确修改temp1里对应的ps的值

 string ps_str() { return (*ps); } 应该改为 string *ps_str() { return (ps); }
 //以下的main函数也要改以下
 while (cin >> str)
    {
        HasPtr temp1;
        temp1.ps_str()=str;  //改为*(temp1.ps_str())=str;
        cout<<temp1.ps_str();  //改为cout<<*(temp1.ps_str()) << endl;
        vec_has.push_back(temp1);
    }
时间: 2024-09-29 23:12:24

c++-为什么这个程序不能正确运行? 求大家帮帮忙的相关文章

网络编程 ping程序有点问题,求大神帮忙看看

问题描述 网络编程 ping程序有点问题,求大神帮忙看看 // ping.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include #pragma comment(lib,"ws2_32") //定义ICMP首部 typedef struct icmp_hdr{ unsigned char icmp_type; //ICMP消息类型,回显请求:8,回显应答请求:0 unsigned char icmp_code; //代码,

online adaboost tracking 程序调试出错 ,求大神帮忙

问题描述 online adaboost tracking 程序调试出错 ,求大神帮忙 大家好,我使用opencv +C++调的online adaboost tracking 程序.怎么编译可以成功,到了调试,就出现下面这种错误呢? 解决方案 已经解决问题.原来是config.txt 文件没有配置正确

程序设计-这个C语言程序怎么写,求大神帮忙

问题描述 这个C语言程序怎么写,求大神帮忙 题目二十四:职工工资管理系统 功能设计要求(1-2人) 1. 输入记录:将每一个职工的姓名.ID号以及基本工资.职务工资.岗位津贴.医疗保险.公积金的数据作为一个记录.?该软件能建立一个新的数据文件或给已建立好的数据文件增加记录. 2. 显示记录:根据用户提供的记录或者根据职工姓名显示一个或几个职工的各项工资和平均工资. 3. 修改记录:可以对数据文件的任意记录的数据进行修改并在修改前后对记录内容进行显示. 4.查找记录:可以对数据文件的任意记录的数据

win7-eclipse无法运行.求大神帮忙

问题描述 eclipse无法运行.求大神帮忙 win7 点eclipse就弹出failed to find a Main Class in"D:eclipseplugins/org.eclipse 解决方案 呵呵 谢谢你们 我终于搞好了 从昨天晚上到现在 都发好几个贴了 谢谢为我解答的大神 原因是目录下有中文文件夹 希望可以帮到后面的朋友 解决方案二: 有点忘记了,你看看eclipse版本和jdk版本是否统一!

printf-为什么这一小段代码总是运行时错误 求大家帮帮忙

问题描述 为什么这一小段代码总是运行时错误 求大家帮帮忙 #include<stdio.h>#include<string.h>int main(){ int t; scanf(""%d""&t); while(t--) { int n; scanf(""%d""&n); while(n--) { char a[]="">+""; char

跪求高手出现-求高手帮帮忙,不知道该怎样解决

问题描述 求高手帮帮忙,不知道该怎样解决 Exception in thread "main" java.lang.StackOverflowError at java.text.DecimalFormat.subformat(DecimalFormat.java:903) at java.text.DecimalFormat.format(DecimalFormat.java:692) at java.text.DecimalFormat.format(DecimalFormat.j

怎样使界面成为下面的样子,求好心人帮帮忙。。

问题描述 怎样使界面成为下面的样子,求好心人帮帮忙.. 源程序:import java.awt.*;import java.awt.event.*; import javax.swing.*;public class RecJFrame extends JFrame implements ActionListenerComponentListener { private JRadioButton colorsbutton[]; //单选按钮组 private RecNCanvas canvas;

24色位图,字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙

问题描述 24色位图,字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙 24色位图(如下图)字母图片验证码识别,基于MFC对话框的程序,在线求助,高手帮帮忙

Android怎么实现拖动,拼图!求大家帮帮忙啊!!

问题描述 Android怎么实现拖动,拼图!求大家帮帮忙啊!! 我要的效果是 比如我在左边选择了第一个模版,然后我拖拽到右边工作区域,松开放下,然后我在去左边选择模版,比如我在选择第一个模版,又拖动右边,比如我我放在我第一个的左边,这是要注意了,这2个图片不能重叠在一起!!如果我觉得第二个没放好!我可以在点击让他消失,在去左边选择一个模版,拖过来拼在上下左右的位置!!! 怎么实现啊!!!求大家帮帮忙了!!小弟没搞过这种东西啊!!小弟就知道判断手势完成拖动,但是怎么实现拼图效果.就不知道了啊! 求