2013-10-04 72 views
0

說我有兩個功能,一個叫另一個工作。你可以把一個函數內的另一個函數在c + +?

void friendList::addFriend(string userNameIn) 
{ 
    if(friendList::isFriend(userNameIn)) 
     //add friend 
} 

bool friendList::isFriend(string name) 
{ 
    //check if user name exists 
} 

這是允許的嗎?我遇到以下錯誤: In member function 'void User::addFriend(std::string)': and error: cannot call member function 'bool friendList::isFriend(std::string)' without object

是否因爲功能尚未完全填寫?

+0

'friendList'是一種類型嗎?這些函數('addFriend()'和'isFriend()')是這種類型的成員函數嗎?這個問題的答案將決定你的問題的_correct_答案是什麼。 – Chad

+2

您粘貼的代碼實際上是真實的代碼嗎?在代碼中你有'friendList :: addFriend',但你可以參考下面的'User :: addFriend'。如果'addFriend()'真的在'User'中,那麼你需要一個'friendList'對象來調用'isFriend'。 –

+0

是friendList是我創建的類型,addFriend和isFriend都是friendList的函數。我正在嘗試定義它們。 addFriend在User和friendList中 – robertjskelton

回答

3

是的,函數當然可以調用C++中的其他函數。

這樣做是不是功能放入其他功能的情況下:您的問題標題是誤導性的。

看起來好像addFriend可能是一個靜態成員函數,因此它沒有對象,而isFriend是一個非靜態成員函數。當一個類的靜態成員函數調用非靜態成員函數,它必須提供一個對象:

class someclass { 
// ... 
    static void static_member(); 
    void nonstatic_member(); 
}; 

void some_class::static_member() 
{ 
    nonstatic_member(); // error 
    some_instance.nonstatic_member(); // okay 
} 

void some_class::nonstatic_member() 
{ 
} 

static_member不能打電話nonstatic_member,但它可以在對象上調用nonstatic_member。只要some_instance適當地在某個地方定義爲some_class的實例,它將起作用。

+0

+1是的,就是這樣! –

+0

我認爲這是我需要做的。現在要弄清楚如何製作一個物體...... – robertjskelton

+0

@robertjskelton:你不需要一個物體,因爲你在一個物體裏面。簡單的改變'if(friendList :: isFriend(userNameIn))'到'if(isFriend(userNameIn))'和你當前使用的對象將被使用。閱讀關於'this'對象的信息 –

-1

你想使用'this'指針。 this->isFriend(userNameIn)

+0

這不是必需的。 – interjay

+0

那裏已經有一個隱含的'this'了。他的代碼相當於'this-> friendList :: isFriend(userNameIn)'。 – Simple

+0

你確定你是對的,丹尼爾弗雷明確表示我的意思好多了。你可以使用這個或不是它取決於你所有我說的是你需要在對象上調用它,而不是像它是一個靜態函數。 – spartacus

1

編譯器錯誤:

cannot call member function [...] without object

建議,我認爲你試圖調用非static成員函數直接,而不是通過一個對象。例如:

class Foo 
{ 
public: 
    int DoIt() {} 
}; 

int main() 
{ 
    Foo::DoIt(); 
} 

如果這就是你想要做的,你不能。非static成員函數需要通過對象調用:

int main() 
{ 
    Foo foo; 
    foo.DoIt(); 
} 

如果從通過對象調用必須副歌,那麼你需要做的成員函數static

class Foo 
{ 
public: 
    static int DoIt() {} 
}; 

int main() 
{ 
    Foo::DoIt(); // OK 
} 

但那麼,DoIt將無法​​呼叫其他非static成員函數。

相關問題