expected primary-expression before ']' token 这是什么错误

guzhebo001 2009-02-01 08:26:00
G:\C++初级\string2.cpp In constructor `String::String()':
54 G:\C++初级\string2.cpp expected primary-expression before ']' token

以上就是错误的提示,知道的请告知下,谢谢

#include<iostream>
#include<string.h>
using namespace std;

class String
{
private:
char *ptr;
public:
String();
String(char *s);
String(const String &src);
~String();

String& operator = (const String &src)
{
cpy(src.ptr); return *this;
}

String& operator = (char *s)
{
cpy(s); return *this;
}

String operator + (char *s);

int operator == (const String &other);
operator char*() {return ptr;}

void cat(char *s);
void cpy(char *s);

};

int main()
{
String a,b,c;
a = "I";
b = "am";
c = "so";
String d = a + b + c + "very happpy!\n";
cout<<d;

return 0;
}


//---------------------------------------

//String 类的成员函数

String::String()
{
ptr = new char[];
ptr[0] = '\0';
}

String::String(char *s)
{
int n = strlen(s);
ptr = new char[n+1];
strcpy(ptr,s);
}


String::String(const String &src)
{
int n = strlen(src.ptr);
ptr = new char[n+1];
strcpy(ptr,src.ptr);
}

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

int String::operator == (const String &other)
{
return (strcmp(ptr,other.ptr) == 0);
}

String String::operator + (char *s)
{
String new_str(ptr);
new_str.cat(s);
return new_str;
}

//cpy函数--用于拷贝字符串
//
void String::cpy(char *s)
{
delete [] ptr;
int n = strlen(s);
ptr = new char[n+1];
strcpy(ptr,s);
}

//cat函数--用于连接字符串
//
void String::cat(char *s)
{
//为新的字符串数据分配足够的空间
int n = strlen(ptr) + strlen(s);
char *p1 = new char[n+1];

//将数据拷贝到新的内存块
strcpy(p1,ptr);
strcat(p1,s);

//回收旧的内存快,并更新ptr
delete [] ptr;
ptr = p1;
}
...全文
70206 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenjianhn 2009-03-12
  • 打赏
  • 举报
回复
学习了
waizqfor 2009-02-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 guzhebo001 的回复:]
再次感谢 waizqfor dev-C++ 真的很好用

ptr = new char[]; 而这里 改成ptr = new char[1]; 就好了,刚发现的,

输出是 Iamsovery happy!
[/Quote]
呵呵 我刚才忙的别的 没把你的程序用别的编译器 试 所以so 对不起了 改正就好了
nineforever 2009-02-01
  • 打赏
  • 举报
回复
new char[]

->

new char[1]
guzhebo001 2009-02-01
  • 打赏
  • 举报
回复
再次感谢 waizqfor dev-C++ 真的很好用

ptr = new char[]; 而这里 改成ptr = new char[1]; 就好了,刚发现的,

输出是 Iamsovery happy!
tangshuiling 2009-02-01
  • 打赏
  • 举报
回复
vc6很多地方还是不符合标准的,c++标准中new char[]中括号中必须有值
waizqfor 2009-02-01
  • 打赏
  • 举报
回复
code 没错啊 拿VC6试了一下 没出现LZ的错误

#include <iostream>
#include <string.h>
using namespace std;

class String
{
private:
char *ptr;
public:
String();
String(char *s);
String(const String &src);
~String();

String& operator = (const String &src)
{
cpy(src.ptr); return *this;
}

String& operator = (char *s)
{
cpy(s); return *this;
}

String operator + (char *s);

int operator == (const String &other);
operator char*() {return ptr;}

void cat(char *s);
void cpy(char *s);

};

int main()
{
String a,b,c;
a = "I";
b = "am";
c = "so";
String d = a + b + c + "very happpy!\n";
cout <<d;

return 0;
}


//---------------------------------------

//String 类的成员函数

String::String()
{
ptr = new char[];
ptr[0] = '\0';
}

String::String(char *s)
{
int n = strlen(s);
ptr = new char[n+1];
strcpy(ptr,s);
}


String::String(const String &src)
{
int n = strlen(src.ptr);
ptr = new char[n+1];
strcpy(ptr,src.ptr);
}

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

int String::operator == (const String &other)
{
return (strcmp(ptr,other.ptr) == 0);
}

String String::operator + (char *s)
{
String new_str(ptr);
new_str.cat(s);
return new_str;
}

//cpy函数--用于拷贝字符串
//
void String::cpy(char *s)
{
delete [] ptr;
int n = strlen(s);
ptr = new char[n+1];
strcpy(ptr,s);
}

//cat函数--用于连接字符串
//
void String::cat(char *s)
{
//为新的字符串数据分配足够的空间
int n = strlen(ptr) + strlen(s);
char *p1 = new char[n+1];

//将数据拷贝到新的内存块
strcpy(p1,ptr);
strcat(p1,s);

//回收旧的内存快,并更新ptr
delete [] ptr;
ptr = p1;
}
tangshuiling 2009-02-01
  • 打赏
  • 举报
回复

错误信息已经告诉你啦
String::String()
{
ptr = new char[]; //没有这种用法直接ptr=new char;
ptr[0] = '\0';
}

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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