error C2143: syntax error : missing ';' before '&'
最近自己写了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";
}
}