我正在编写一个名为 的类Word
,它处理 ac 字符串并重载
<
, >
, <=
,>=
运算符。
word.h
:
friend bool operator<(const Word &a, const Word &b);
word.cc
:
bool operator<(const Word &a, const Word &b) {
if(a == NULL && b == NULL)
return false;
if(a == NULL)
return true;
if(b == NULL)
return false;
return strcmp(a.wd, b.wd) < 0; //wd is a valid c string, EDIT: changed to strcmp
}
main
:
char* temp = NULL; //EDIT: i was mistaken, temp is a char pointer
Word a("blah"); //a.wd = [b,l,a,h]
cout << (temp<a);
我operator<
在main
. 我可以通过写来纠正问题
cout << (a>temp);
类似的operator>
定义并且我没有收到任何错误,但我的任务需要(temp < a)
工作,所以这是我寻求帮助的地方。
编辑:我第一次犯了一个错误,我说 temp 是 type Word
,但它实际上是 type char*
。所以我假设编译器Word
使用我的一个构造函数将 temp 转换为 a 。我不知道它会使用哪个,以及为什么这会起作用,因为第一个参数不是Word
.
这是我认为用于使用的构造Word
函数temp
:
Word::Word(char* c, char* delimeters="\n") {
char *temporary = "\0";
if(c == NULL)
c = temporary;
check(stoppers!=NULL, "(Word(char*,char*))NULL pointer"); // exits the program if the expression is false
if(strlen(c) == 0)
size = DEFAULT_SIZE; //10
else
size = strlen(c) + 1 + DEFAULT_SIZE;
wd = new char[size];
check(wd!=NULL, "Word(char*,char*))heap overflow");
delimiters = new char[strlen(stoppers) + 1]; // EDIT: changed to []
check(delimiters!=NULL,"Word(char*,char*))heap overflow");
strcpy(wd,c);
strcpy(delimiters,stoppers);
count = strlen(wd);
}
wd
是类型char*
感谢您查看这个大问题并提供帮助。让我知道您是否需要更多代码来查看