1

Тема: Питання про розділення оголошення класу і реалізації

Здається що це просте і банальне питання проте для мене тут не все так просто

В мене є така структура

class A
{
public: int a;
};

class B
{
public: A a;
};



    int DoSomething()
    {
        B b;
        A field;
        b.a = field;
    }

Відповідно в мене є файли A.h A.cpp B.h B.cpp Мені треба зробити так щоб клас B бачив клас А і щоб клас А і В був доступний наприклад в main(). Але я так і не розібрався як це зробити по нормальному в мене чомусь виходить 2 крайності або десь не видно класу або перевизначення типy "class". Тобто в мене питання як правильно організувати цю схему через include, stdafx, pragma once

2

Re: Питання про розділення оголошення класу і реалізації

Я не шарю C++ але хіба атрибутом класу може бути екземпляр іншого класу а не вказівник на нього?

3

Re: Питання про розділення оголошення класу і реалізації

Я також не шарю, але це не принципово, можна зробити і щоб був вказівник, мені б спочатку з інклудами розібратись а уже далі з логікою.

4 Востаннє редагувалося Patron (25.11.2012 16:08:34)

Re: Питання про розділення оголошення класу і реалізації

bunyk написав:

Я не шарю C++ але хіба атрибутом класу може бути екземпляр іншого класу а не вказівник на нього?

звичайно що може бути.

A variable has 3 things when you make them :
int <- type
x <- name
=3 <- data

A pointer doesn't have any data in themself, they "point" to a variable.
Like this :

int x = 3;
int *x = x

- ось і вся різниця між вказівниками і просто змінними, вказівниками на об'єкти і просто об'єктами

5

Re: Питання про розділення оголошення класу і реалізації

Ні, ну з атомарними типами то ясно. Але ж в C++ не все об'єкт.

Але це я неуважно прочитав запитання. Якщо проблема в інклюдах, то потрібно зробити так щоб вони працювали лише раз:

#ifndef MODULE_NAME_H
#define MODULE_NAME_H
// insert code here
#endif

http://stackoverflow.com/questions/1653 … ader-files

Подякували: Replace1

6

Re: Питання про розділення оголошення класу і реалізації

bunyk написав:

Ні, ну з атомарними типами то ясно. Але ж в C++ не все об'єкт.

#ifndef MODULE_NAME_H
#define MODULE_NAME_H
// insert code here
#endif

Це еквівалентно

#pragma once

По темі, просто потрібно робити інклуди в хеадерах:

В a.h:

#pragma once
#include b.h

В b.h:

#pragma once
#include a.h

В main.h:

#pragma once
#include a.h

В a.cpp, b.cpp, main.cpp інклудяться тільки хеадери з такою ж назвою.

Подякували: Patron, truesupport2

7

Re: Питання про розділення оголошення класу і реалізації

В мене вийшла така схемка

http://i48.сайт-злодій/big/2012/1126/26/656f09dfba395b38fed2a37d14ad5026.png

З інкудами зробив так.

stdafx.h

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>

#include <iostream>
#include <string>
#include <vector>
#include <fstream>

#include "patient.h"
#include "hospital.h"

patient.h

#include "stdafx.h"
#include "DateTime.h"
#pragma once

patient.cpp

#include "stdafx.h"

datetime.h

#include <iostream>

datetime.cpp

#include "DateTime.h"

hospital.h

#include "stdafx.h"

hospital.cpp

#include "stdafx.h"

Незнаю чи хтось щось зрозуміє, але вирішив показати :)

Подякували: Replace1