我寫一個稱爲Word
類,用於處理C字符串和重載 <
,>
,<=
,>=
運營商空C++分割誤差。當第一個參數是在比較操作過載
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);
在main
的最後一行之後,我在operator<
方法 的第一行之前得到了分段錯誤。我可以通過寫
cout << (a>temp);
其中operator>
類似地定義糾正問題,我沒有得到任何錯誤,但我 分配要求(temp < a)
工作,所以這是我尋求幫助。
編輯:我犯了一個錯誤第一次和我說溫度是Word
類型, ,但它實際上char*
類型是。所以我假定編譯器使用我的一個構造函數將 temp轉換爲Word
。我不知道它會使用哪一個 以及爲什麼這會起作用,因爲第一個參數不是Word
。
這裏我想構造被用來使用temp
,使Word
:
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*
感謝看着這個大問題,並試圖幫助。讓我知道如果你 需要更多的代碼來看看
請用您正在使用的語言標記問題 – sidyll
我們需要看一些'Word'類。目前還不清楚如何與'NULL'進行比較,或'wd'成員是什麼。 – interjay
你的調試器說什麼?你可以使用它的「trace into」或「step into」功能來逐步瞭解代碼的功能,包括如何將它轉換爲空字符*到Word的對象。 – StarPilot