Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с описанием класса


Автор: RinOSpro 15.10.2007, 20:02
В общем делаю по примеру игру ColorLines, в с++ я новичек. И чтото застрял вот на этой теме

http://netcode.ru/cpp/?lang=&katID=17&skatID=157&artID=4923

не пойму где описывать класс. Помогите пожалуйста!

Автор: marcusmae 15.10.2007, 20:17
RinOSpro, в плюсах принято описание класса помещать в хедер-файл, а тела методов и конструкторы - в cpp-файл. Скажем, у Вас есть основной файл программы, main.cpp. В нем прописывается директива включения хедера :

Код

#include "headername.h"


Далее, в файле headername.h по Вашему примеру пишется описание :

Код

class CLinesDoc : public CDocument
{
    ...
    // Attributes
public:
    int m_iNumOfRows; // количество рядов игрового поля
    int m_iNumOfColors; //максимальное количество цветов
    int m_iNumOfPoints; //количество очков
    int m_iNumOfBalls; //количество шариков на поле
    int m_field[iNumOfRows][iNumOfRows]; //массив, задающий игровое поле
    ...


А тела методов и конструкторы помещаются в main.cpp :

Код

CLinesDoc::CLinesDoc()
{
    // TODO: add one-time construction code here
    m_iNumOfColors=7;//количество цветов (7 максимум)
    m_iNumOfRows=9;
}

BOOL CLinesDoc::OnNewDocument()
{
    if (!CDocument::OnNewDocument())
        return FALSE;
    
    // TODO: add reinitialization code here
    // (SDI documents will reuse this document)
    m_iNumOfBalls=0; //Шариков на поле пока нет
    m_iNumOfPoints=0;//Количество очков (пока ноль)
    srand(GetTickCount()%32000); //Инициализируем датчик случайных чисел
    for(int j=0;j<m_iNumOfRows;j++){
        for(int i=0;i<m_iNumOfRows;i++){
            m_field[i][j]=0; //заполняем поле нулями
        }
    }
    ...


Таков хороший тон. Можно писать без вынесения тел в cpp-файл (C#-ый стиль). Если функции небольшие, то вполне читаемо. А вообще описывать класс можно где-угодно.

Я правильно понял вопрос?

Автор: RinOSpro 16.10.2007, 07:18
Цитата(marcusmae @  15.10.2007,  20:17 Найти цитируемый пост)
Я правильно понял вопрос? 

Наверно правильно я в этом просто нулями. Дело в том что я пишу на делфи и еле еле учусь на с++ и там так много файлов что я не знаю куда все это писать.

Я там все прописал но у меня чтото ошибку показывает на вот эту строку

Код

CLinesDoc::CLinesDoc()
{
    // TODO: add one-time construction code here
    m_iNumOfColors=7;//количество цветов (7 максимум)
    m_iNumOfRows=9;
}

Автор: marcusmae 16.10.2007, 10:09
Цитата(RinOSpro @  16.10.2007,  07:18 Найти цитируемый пост)
Я там все прописал но у меня чтото ошибку показывает на вот эту строку


Пожалуйста, ошибку и остальной код в студию :

Автор: RinOSpro 16.10.2007, 20:59
MainFrm.cpp
d:\ColorLines\mainfrm.cpp(79) : error C2143: syntax error : missing ')' before ';'
d:\ColorLines\mainfrm.cpp(116) : error C2600: 'CLinesDoc::CLinesDoc' : cannot define a compiler-generated special member function (must be declared in the class first)
Build log was saved at "file://d:\ColorLines\ColorLines\Debug\BuildLog.htm"
ColorLines - 2 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Автор: dumb 16.10.2007, 23:40
Код

class CLinesDoc : public CDocument
{
    ...
};
?

Автор: RinOSpro 17.10.2007, 18:05
Вот посмотрите пожалуста где ошибка!

Автор: a_n_d_y 17.10.2007, 18:24
Код

class CLinesDoc  : public CDocument
{
public:
    int m_iNumOfRows; // количество рядов игрового поля
    int m_iNumOfColors; //максимальное количество цветов
    int m_iNumOfPoints; //количество очков
    int m_iNumOfBalls; //количество шариков на поле
    int m_field[iNumOfRows][iNumOfRows];
    CLinesDoc(); // !!! не было объявления конструктора...
};


кроме того студия еще материлась на отсутствие файла "res\ColorLines.rc2"

Автор: RinOSpro 17.10.2007, 19:47
a_n_d_y   ГИГАНТСКОЕ СПАСИБО!!! 

И еще что бы уточнить, я описал класс в MainFrm.cpp а то что то из *.h не работает, или я не что то не так делаю.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)