error C2143: syntax error : missing ';' before '&'

computerma 2009-03-04 04:41:33
  最近自己写了String类,包含三个文件:String.h、String.cpp和main.cpp。
  在String.h中标为红色的那行出现了error C2143: syntax error : missing ';' before '&'。如何解决?

// String.h
#include <string.h>
#include <new>
#include <iostream>

class String{
char* s;
int size;

public:
String();
String(char*);
~String();

//copy constructor, copy assignment
String(const String&);
String& operator=(const String&);

int computeSize() const;

friend bool operator==(const String&, const char*);
friend bool operator==(const String&, const String&);
friend bool operator!=(const String&, const char*);
friend bool operator!=(const String&, const String&);

//conversion to C-style string;
char* convert2CStyle(const String&);

//concatenation
String& operator+=(const String&);
String& operator+=(const char*);

//I/O streams
friend ostream& operator<<(ostream&, const String&);
friend istream& operator>>(istream&, String&);
};

String operator+(const String&, const String&);
String operator+(const String&, const char*);

// String.cpp
#include "String.h"

String::String() {};

String::String(char* cp)
{
size = strlen(cp);
s = new char[size+1];
strcpy(s, cp);
}

String::~String()
{
delete[] s;
}

//copy constructor, copy assignment
String::String(const String& str)
{
s = str.s;
size = str.size;
}

String& String::operator=(const String& str)
{
if(size != str.size){
size = str.size;
delete[] s; // 有无必要?
s = new char[size+1];
}
strcpy(s, str.s);
}

int String::computeSize() const
{
return size;
}

bool String::operator==(const String& str1, const char* str2)
{
return strcmp(str1.s, str2)==0;
}

bool String::operator==(const String& str1, const String& str2)
{
return strcmp(str1.s, str2.s)==0;
}

bool String::operator!=(const String& str1, const char* str2)
{
return strcmp(str1.s, str2)!=0;
}

bool String::operator!=(const String& str1, const String& str2)
{
return strcmp(str1.s, str2.s)!=0;
}

//conversion to C-style string;
char* String::convert2CStyle(const String& str)
/********************************************
A problem in the implementation:
If the object whose member s is returned
is destructed, the value of s is meaning
-less and may cause disaster.
*******************************************/
{
return str.s;
}

//concatenation
String& String::operator+=(const String& str)
{
size += str.size;
char* sp = 0;
strcpy(sp, str.s);
delete[] s;
s = new char[size+1];
s = strcat(sp, str.s);
return *this;
}

String& String::operator+=(const char* cStr)
{
size += strlen(cStr);
char* sp = 0;
strcpy(sp, cStr);
delete[] s;
s = new char[size+1];
s = strcat(sp, cStr);
return *this;
}

//I/O streams
ostream& String::operator<<(ostream&, const String&)
{
// to be implemented
}

istream& String::operator>>(istream&, String&)
{
// to be implemented
}

String operator+(const String& str1, const String& str2)
{
char* sp = 0;
strcpy(sp, str1.s);
strcat(sp, str2.s);
return String(sp);
}

String operator+(const String& str1, const char* str2)
{
char* sp = 0;
strcpy(sp, str1.s);
strcat(sp, str2);
return String(sp);
}

// main.cpp
#include "String.h"

using std::cout;
using std::cerr;
using std::bad_alloc;

int main()
{
String str1 = String("msdn");
bool flag = str1=="csdn";
if (flag){
// cout << str1 << "==csdn\n";
cout << "msdn==csdn\n" << "An error happened.\n";
} else{
cout << "msdn!=csdn\n";
}
String str2 = String("csdn");
flag = str1!=str2;
if (flag){
cout << "msdn!=csdn\n";
} else{
cout << "An error happened.\n" << "msdn==csdn\n";
}
}
...全文
327 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
computerma 2009-03-04
  • 打赏
  • 举报
回复
  在String.h开始处添加
using std::ostream;
using std::istream;

  我印象中Bjarne Stroustrup在他的著作The C++ Programming Language中说使用using std;会对名字空间造成污染(pollute the namespace)。但我可以确信他赞同using std::xxxxx;而不是using std;
lingyin55 2009-03-04
  • 打赏
  • 举报
回复
加上using namespace std;
arong1234 2009-03-04
  • 打赏
  • 举报
回复
BTW:由于std和友元有bug,vc6不可能正确编译这个
sagegz 2009-03-04
  • 打赏
  • 举报
回复

using namespace std;
arong1234 2009-03-04
  • 打赏
  • 举报
回复
ostream类型不存在,你没有use namespace std,因此找不到std::ostream

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧