注册 登录
编程论坛 C++教室

) 的error及错误的指针

humy 发布于 2012-08-20 20:23, 480 次点击
输入了书上练习题答案的代码:
#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;
}
只有本站会员才能查看附件,请 登录

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