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;
}
...全文
69936 7 打赏 收藏 转发到动态 举报
写回复
用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';
}

2022 / 01/ 30: 新版esptool 刷micropython固件指令不是 esptool.py cmd... 而是 esptool cmd... 即可;另外rshell 在 >= python 3.10 的时候出错解决方法可以查看:  已于2022年发布的: 第二章:修复rshell在python3.10出错 免费内容: https://edu.csdn.net/course/detail/29666 micropython语法和python3一样,编写起来非常方便。如果你快速入门单片机玩物联网而且像轻松实现各种功能,那绝力推荐使用micropython。方便易懂易学。 同时如果你懂C语音,也可以用C写好函数并编译进micropython固件里然后进入micropython调用(非必须)。 能通过WIFI联网(2.1章),也能通过sim卡使用2G/3G/4G/5G联网(4.5章)。 为实现语音控制,本教程会教大家使用tensorflow利用神经网络训练自己的语音模型并应用。为实现通过网页控制,本教程会教大家linux(debian10 nginx->uwsgi->python3->postgresql)网站前后台入门。为记录单片机传输过来的数据, 本教程会教大家入门数据库。  本教程会通过通俗易懂的比喻来讲解各种原理与思路,并手把手编写程序来实现各项功能。 本教程micropython版本是 2019年6月发布的1.11; 更多内容请看视频列表。  学习这门课程之前你需要至少掌握: 1: python3基础(变量, 循环, 函数, 常用库, 常用方法)。 本视频使用到的零件与淘宝上大致价格:     1: 超声波传感器(3)     2: MAX9814麦克风放大模块(8)     3: DHT22(15)     4: LED(0.1)     5: 8路5V低电平触发继电器(12)     6: HX1838红外接收模块(2)     7:红外发射管(0.1),HX1838红外接收板(1)     other: 电表, 排线, 面包板(2)*2,ESP32(28)  

64,688

社区成员

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

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