2015-09-25 40 views
0

對不起,如果這是之前問過,如果它,只是刪除一個鏈接。 我對C++相當陌生。C++類的順序

我有一個項目,需要我創建一個類似Twitter的程序;每個用戶都有自己的牆,主頁,好友列表,收件箱等等。問題是我必須打開一個.cpp文件;我必須將所有類放在一個文件中。現在自C++自上而下讀取數據之後,我在創建/引用其他類時遇到了問題,因爲它們尚未定義。

例如,由於用戶包含一個由我的FriendsList類構成的對象,所以我必須先放置FriendsList,但是由於用戶尚未定義,我無法創建保存用戶的數組。

對不起,如果這是一個愚蠢的問題。

編輯: 我將如何去前瞻性聲明?

class FriendsList; 
class User() 
{ 
    FriendsList* friends; 

    //constructor and other stuff 
}; 
class FriendsList() 
{ 
//stuff 
}; 

會是這樣嗎?對不起,我只是困惑。

+1

可能重複的[前向聲明的目的是什麼?](http://stackoverflow.com/questions/3110096/what-is-the-purpose-of-forward-declaration) – Barmar

+0

編輯詢問我如何將前進宣言。 – thatjkguy

+0

是的,那就是如何做前向聲明。 – Barmar

回答

0

我想我明白你的意思了。奇怪的是,他們讓你把所有東西放在一個文件中。所以我會做什麼。是以下內容。

class user{ 
    string url = "homepage" 
    class friendList{ 
     user currFriend; 
     user* nextFriend; 
    }; 
    class wall{ 
     string status = "empty status"; 
    }; 
    class inbox{ 
     int number_of_messages; 
    }; 
}; 

我也覺得這個網站可能會有幫助。 http://en.cppreference.com/w/cpp/language/nested_types

請消息或評論,如果此幫助,或者如果它沒有

+0

我在想做嵌套類,但我讀過它並不是首選。我只是想知道是否有更簡單的事情。但這是一個有效的選擇! – thatjkguy

0

仰望「着定義」解決依賴於每個人的定義兩個類的問題。

但是...我不認爲這是真正解決您的問題的解決方案。考慮使用std::list<>(或vector<>array<>或任何最適合您的需求)來保存您所需的信息。查看C++集合,並從那裏開始

class user 
{ 
    std::list<user&> m_Friends; 
    std::list<std::string> m_Messages; 
    std::list<std::string> m_Wall; 
}; 
+0

即使他使用矢量,他是否還需要前向聲明?如果'User'包含'vector '而'FriendsList'包含'vector ',那麼您仍然有循環依賴。 – Barmar

+0

根本不需要班級FriendsList。這實際上就是'list m_Friends'。 –

+0

但也許他有其他方法,他想爲'FriendsList'類定義。 – Barmar

0

前向聲明是大多數問題的解決方法。感謝您提供其他替代方案的幫助和提示!