错误的位置在下面的评论中指出。请帮忙解决这个问题。
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
class String
{
private:
enum{sz=80};
char str[sz];
public:
String()
{
strcpy(str,"");
}
String (char s[])
{
strcpy(str,s);
}
void display() const
{
cout<<str;
}
String operator +(String ss) const
{
String temp;
if(strlen(str) + (strlen(ss.str) < sz)
{
strcpy(temp.str,str);
strcat(temp.str , ss.str);
} // Error is reported here!
else
{
cout<<"\nstring overflow";
exit(1);
}
return temp;
}
};
int main()
{
String s1="\nMerry christmas";
String s2="happy new year";
String s3;
s1.display();
s2.display();
s3.display();
s3=s1+s2;
s3.display();
cout<<endl;
return 0;
}
答案 0 :(得分:8)
if(strlen(str) + (strlen(ss.str) < sz)
应该是
if(strlen(str) + strlen(ss.str) < sz)
请注意原始行中有4 (
但只有3 )
。这些需要匹配,但他们没有。由于第二个(
之前的strlen()
是多余的(无需在括号中包含strlen(ss.str)
),因此您可以删除它。
Original code with changes to the #include
s和fixed code。请注意,我必须将#include
从string.h
更改为cstring
以获取ideone。无论如何,这是首选。我还必须添加using namespace std;
,因为您的代码未在必要时明确使用std
namepsace,例如使用cout
。你还应该take care of those warnings。
编译器错误指向4行的原因是因为它是它实现的行“哦不,这里有问题我永远无法解析这段代码!” GCC在错误报告方面非常糟糕,但只有一个编译器(例如clang)可以更好地完成它,它会回溯到错误的根本原因所在的适当行,甚至可能会建议您修复。
答案 1 :(得分:4)
您在此行的末尾缺少右括号:
if(strlen(str) + (strlen(ss.str) < sz)
答案 2 :(得分:4)
此处发生错误:
if(strlen(str) + (strlen(ss.str) < sz)
那应该是:
if (strlen(str) + strlen(ss.str) < sz)