标题:) 的error及错误的指针
只看楼主
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
结帖率:92.86%
已结贴  问题点数:20 回复次数:7 
) 的error及错误的指针
输入了书上练习题答案的代码:
#include <string>
#include <iostream>
using namespace std;
class screen{
public :
    typedef string ::size_type index;
    char get() const{   return contents[ cursor];}
    inline char get(index ht,index wd) const;
    index get_cursor() const;
    screen(index hght, index wdth,const  string & cntnts);
    screen& set (char);
    screen& move (index r,index c);
   
    screen& display(ostream & os);
private :
    string contents;
    index cursor;
    index height;
    index width;
};

screen ::screen(index hght, index wdth,const string &cntnts):
contents (cntnts),cursor(0),height(hght),width(wdth){}
char screen:: get (index r,index c)const
{
    index row=r*width;
    return contents[row+c];
}
inline screen::index screen ::get_cursor() const
{
    return cursor;
}
screen &screen ::set(char c)
{
    contents[cursor]=c;
    return *this;
}
screen &screen:: move(index r,index c)
{
    index row=r* width;
    cursor=row+c;
    return *this;
}
screen& screen::display(ostream &os)
{
    os<<contents;
    return *this;
}
int main(){
    int a,b,d,e;
    string c;
    cin>>a>>b>>d>>e>>c;     
    screen myscreen(a,b,c);
    myscreen.move(d,e).set('#').display(cout);
    return 0;
}
1.zip (62.59 KB)

问题截图:见附件文档               谢谢
搜索更多相关主题的帖子: contents private display 
2012-08-20 20:23
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
得分:0 
额。。。问题2发现似乎明白了,因为我是输入5,6 就是说string长30,你若输入的string不是长为30 就错了。。。可是在代码里哪里有把height和width与string长度联系在一起的呢?
2012-08-20 20:32
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:20 
没有联系在一起的部分,所以你的 string 是不是 30 都无所谓。
但是如果你的 string 不够长,执行那个 set 的时候就会在越界的地方设置值,这会出错。那个错误提示写的 out of range (越界异常) 就是指这个。
2012-08-20 21:59
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
第一个问题没看懂。改前的和改后的有什么区别?
2012-08-20 22:01
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
另外你还可以再增加些功能,既然屏幕应该是方形的,就不要 display 成一串的样子。在适当的地方回下车,会更有趣些。
2012-08-20 22:03
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
得分:0 
回复 4楼 pangding
谢谢
我也不知道怎么回事。同一个语句,开始输入的是
screen& set (char);会编译出错如截图。
后来改了还几次,改成screen& set(char);
就不会有这个错。如果我把原来的再复制会代码,编译还会出错。所以想问上面的写法哪里有问题?空格还是什么?
2012-08-21 19:39
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
是因为第一个的那左半括号是全角的。用肉眼不太容易发现,我一开始也没看出来。
你看看编译器报的错误是什么,就会容易推断出来。
2012-08-21 22:59
humy
Rank: 2
等 级:论坛游民
帖 子:69
专家分:18
注 册:2012-7-23
得分:0 
谢谢
2012-08-22 08:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-379822-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.123177 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved