2015-09-25 3 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. Это буквально то, что «список m_Friends». –

+0

Но, возможно, у него есть другие методы, которые он хочет определить для класса 'FriendsList'. – Barmar

0

Передовая декларация - это путь для решения большинства моих проблем. Спасибо за помощь и советы по поводу других альтернатив!

Смежные вопросы