C++ 左括号';(';在';foo.cpp';处找到)未正确匹配
下面的注释中指出了错误的位置。请帮助修复此问题C++ 左括号';(';在';foo.cpp';处找到)未正确匹配,c++,compiler-errors,C++,Compiler Errors,下面的注释中指出了错误的位置。请帮助修复此问题 #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[]) {
#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;
}
#包括
#包括
#包括
类字符串
{
私人:
枚举{sz=80};
char-str[sz];
公众:
字符串()
{
strcpy(str,“”);
}
字符串(字符s[])
{
strcpy(str,s);
}
void display()常量
{
cout此行末尾缺少右括号:
if(strlen(str) + (strlen(ss.str) < sz)
if(strlen(str)+(strlen(ss.str)
此处发生错误:
if(strlen(str) + (strlen(ss.str) < sz)
if(strlen(str)+(strlen(ss.str)
这大概应该是:
if (strlen(str) + strlen(ss.str) < sz)
if(strlen(str)+strlen(ss.str)
if(strlen(str)+(strlen(ss.str)
应该是
if(strlen(str) + strlen(ss.str) < sz)
if(strlen(str)+strlen(ss.str)
请注意,在原始行中有4个(
,但只有3个)
。这些需要匹配,但它们不匹配。因为第二个strlen()之前的(
)是多余的(不需要将strlen(ss.str)
括在括号中),您可以删除它
还有。请注意,我必须将ideone的#include
s从string.h
更改为cstring
。无论如何,这是首选。我还必须添加使用名称空间std;
,因为您的代码没有在需要时明确使用std
名称空间,例如使用cout
。您也应该这样做
编译器错误向下指向4行的原因是,在这一行中,它意识到“哦,不,这里有一个问题,我永远无法解析此代码!”GCC在错误报告方面非常糟糕,但它是一个编译器(例如,clang)这样做会更好,因为它会回溯到错误的根本原因所在的适当行,甚至可能会建议您进行修复。您使用什么来编辑源代码?一个好的编辑器通常会在视觉上为您指出正确的方向。您确实知道标准库string
类,对吗?
if(strlen(str) + strlen(ss.str) < sz)