2013-12-14 43 views
0

我想重寫我的項目中的==運算符以獲取String_Data類。 String_Data有一個方法getString(),它返回String_Data對象中保存的字符串。我想在我的==覆蓋中調用這個方法來比較兩個String_Data對象所持有的字符串。當我這樣做時,我被告知我用作參數的String_Data對象沒有這種方法。我不知道發生了什麼問題,但任何幫助將不勝感激。這是我的代碼。重寫時不能調用同一個類中的方法==運算符C++

#include "stdafx.h" 
#include <vector> 
#include <sstream> 
#include "String_Data.h" 

using namespace std; 

std::string myString; 
int stringCount; 

String_Data::String_Data(std::string URL, int useCount) 
{ 
    stringCount = useCount; 
    myString = URL; 
} 

String_Data::~String_Data(void) 
{ 
} 

bool operator == (String_Data sd, String_Data sd2) { 
return (sd.getString() == sd2.getString()); 
} 

std::string getString() { 
    return myString; 
} 
void increment() { 
    stringCount++; 
} 

bool compare() { 

} 

int getCount() { 
    return stringCount; 
} 

感謝您的任何幫助提前。

+2

我沒有看到任何試圖調用運==覆蓋任何東西。包括那個和你的編譯器錯誤 –

+0

看來你想_overload_而不是_override_相等運算符:相似的名稱,有點相關,但很不相同。您發佈的代碼不顯示類聲明,並且發佈的'getString()'函數不是成員。 –

+0

@DietmarKühl它可能是,如果這是一個類中聲明的方法內聯 –

回答

0

根據上面提供的有限信息,我猜測您沒有在String_Data定義中正確提供getString方法。當你試圖從operator ==中調用它時,編譯器自然會抱怨該方法不存在!

簡單的修復方法是確保在您的class String_Data中提供該方法。此外,看起來你的意圖是讓myStringstringCount成爲String_Data的實際成員,而不是獨立的全局變量。您的類定義應該看的線沿線的東西更多:需要

// String_Data.h 
class String_Data 
{ 
    std::string myString; 
    int stringCount; 
public: 
    //... 
    std::string getString(); 
}; 

而且你getString免費功能轉換成String_Data方法:

std::string String_Data::getString() 
{ 
    return myString; 
} 

這應該糾正你從得到的錯誤超載operator ==。需要注意的是operator ==應以const裁判因爲沒有被修改採取它的參數:

bool operator == (const String_Data &sd, const String_Data &sd2); 
相關問題