#ifndef _MY_SUPER_CLASS_
#define _MY_SUPER_CLASS_
class bb;
class aa : public bb
{
public:
int n;
aa() {n=1;}
void aac();
bb *pbb;
void prnaa();
};
#endif
c++ classes
если делаю так :
##################### File 1 #########################
//consol.cpp
#include <iostream>
#include "inh.cpp"
using namespace std;
class bb;
class aa : public bb
{
public:
int n;
aa() {n=1;}
void aac();
bb *pbb;
void prnaa();
};
void aa::aac() {pbb = new bb(); }
void aa:: prnaa() {cout << "in aa : " << n << endl;}
void main()
{
aa aaa;
aaa.aac();
aaa.pbb->bbc(&aaa);
aaa.pbb->paa->prnaa();
aaa.pbb->paa->n = 5;
aaa.pbb->paa->prnaa();
cin.get();
}
##################### File 2 #########################
//inh.cpp
#include "consol.cpp"
class bb
{
public:
int n2;
bb() {n2=2;}
void bbc(aa *paa2);
aa *paa;
void prnbb();
//~bb();
};
void bb::bbc(aa *paa2) {paa = paa2; }
void bb:: prnbb() {cout << "in bb : " << n2 << endl;}
то получаю ошибку : too many include files:depth=1024
но а если те же 2 класса без includes в одном файле, тогда работает.
ссылкам , выбери что нибудь подходящее для себя.
А по поводу вопроса. Есть такое понятие как заголовочный файл (header), в нем содержится описание, иногда и часть кода. Создай такие для своих классов.
//consol.hpp
Что бы твой класс не переопределялся в других файлах, куда ты его инклудишь, обрами его директивами
#ifndef _MY_SUPER_CLASS_
#define _MY_SUPER_CLASS_
сам класс
#endif
Это даст тебе гарантию того что обявление его будет единожды в программном коде, и нигде более не повторится. Почитай про директивы тоже.
Старайся не инклудить без особой надобности твои файлы с кодом (расширение с++), а инклудь именно файлы описания (header`ы).
Да! И научись уже использовать расширенный режим на форуме, и в частности теги CODE у тебя же уже 2 сообщения, такое оформление радует как тебя так и глаз читателей.
ИМХО в студенты.
Для начала почитать что нибудь про язык с++. пройдись по
А по поводу вопроса. Есть такое понятие как заголовочный файл (header), в нем содержится описание, иногда и часть кода. Создай такие для своих классов.
//consol.hpp
Код:
Что бы твой класс не переопределялся в других файлах, куда ты его инклудишь, обрами его директивами
#ifndef _MY_SUPER_CLASS_
#define _MY_SUPER_CLASS_
сам класс
#endif
Это даст тебе гарантию того что обявление его будет единожды в программном коде, и нигде более не повторится. Почитай про директивы тоже.
Старайся не инклудить без особой надобности твои файлы с кодом (расширение с++), а инклудь именно файлы описания (header`ы).
Да! И научись уже использовать расширенный режим на форуме, и в частности теги CODE у тебя же уже 2 сообщения, такое оформление радует как тебя так и глаз читателей.
ИМХО в студенты.
#ifndef _MY_SUPER_CLASS_
#define _MY_SUPER_CLASS_
надо писать в header файле,
а не в cpp?
какая разница?
нельзя ли сам include как то обрамить?
Цитата:
#ifndef _MY_SUPER_CLASS_
#define _MY_SUPER_CLASS_
class bb;
class aa : public bb
{
public:
int n;
aa() {n=1;}
void aac();
bb *pbb;
void prnaa();
};
#endif
пишет что bb ему не известен
[FONT=Arial]Буду очень благодарен если кто то сможет мне дать полный измененый рабочий пример этих 2 файлов[/FONT]
//console.cpp
Код:
#ifndef _MY_CLASS_AB_
#define _MY_CLASS_AB_
#include <iostream>
using namespace std;
class aa;
class bb
{
public:
int n2;
bb() {n2=2;}
void bbc(aa *paa2);
aa *paa;
void prnbb();
//~bb();
};
class aa : public bb
{
public:
int n;
aa() {n=1;}
void aac();
bb *pbb;
void prnaa();
};
#endif
#define _MY_CLASS_AB_
#include <iostream>
using namespace std;
class aa;
class bb
{
public:
int n2;
bb() {n2=2;}
void bbc(aa *paa2);
aa *paa;
void prnbb();
//~bb();
};
class aa : public bb
{
public:
int n;
aa() {n=1;}
void aac();
bb *pbb;
void prnaa();
};
#endif
// inh.cpp
Код:
#include "console.cpp"
void bb::bbc(aa *paa2) {paa = paa2; }
void bb:: prnbb() {cout << "in bb : " << n2 << endl;}
void aa::aac() {pbb = new bb(); }
void aa:: prnaa() {cout << "in aa : " << n << endl;}
int main()
{
aa aaa;
aaa.aac();
aaa.pbb->bbc(&aaa);
aaa.pbb->paa->prnaa();
aaa.pbb->paa->n = 5;
aaa.pbb->paa->prnaa();
cin.get();
return 0;
}
void bb::bbc(aa *paa2) {paa = paa2; }
void bb:: prnbb() {cout << "in bb : " << n2 << endl;}
void aa::aac() {pbb = new bb(); }
void aa:: prnaa() {cout << "in aa : " << n << endl;}
int main()
{
aa aaa;
aaa.aac();
aaa.pbb->bbc(&aaa);
aaa.pbb->paa->prnaa();
aaa.pbb->paa->n = 5;
aaa.pbb->paa->prnaa();
cin.get();
return 0;
}
Батенька, читайте классику. Страуструп о заголовочных файлах.
Но в этом то и проблема : aa и bb не в одном а в разных файлах.
aa в console, bb в inh (не вместе в одном)
Код:
#ifndef _MY_CLASS_B_
#define _MY_CLASS_B_
#include <iostream>
using namespace std;
class aa;
class bb
{
public:
int n2;
bb() {n2=2;}
void bbc(aa *paa2);
aa *paa;
void prnbb();
//~bb();
};
void bb::bbc(aa *paa2) {paa = paa2; }
void bb:: prnbb() {cout << "in bb : " << n2 << endl;}
#endif
#define _MY_CLASS_B_
#include <iostream>
using namespace std;
class aa;
class bb
{
public:
int n2;
bb() {n2=2;}
void bbc(aa *paa2);
aa *paa;
void prnbb();
//~bb();
};
void bb::bbc(aa *paa2) {paa = paa2; }
void bb:: prnbb() {cout << "in bb : " << n2 << endl;}
#endif
//inh.cpp
Код:
#include "console.cpp"
class aa : public bb
{
public:
int n;
aa() {n=1;}
void aac();
bb *pbb;
void prnaa();
};
void aa::aac() {pbb = new bb(); }
void aa:: prnaa() {cout << "in aa : " << n << endl;}
int main()
{
aa aaa;
aaa.aac();
aaa.pbb->bbc(&aaa);
aaa.pbb->paa->prnaa();
aaa.pbb->paa->n = 5;
aaa.pbb->paa->prnaa();
cin.get();
return 0;
}
class aa : public bb
{
public:
int n;
aa() {n=1;}
void aac();
bb *pbb;
void prnaa();
};
void aa::aac() {pbb = new bb(); }
void aa:: prnaa() {cout << "in aa : " << n << endl;}
int main()
{
aa aaa;
aaa.aac();
aaa.pbb->bbc(&aaa);
aaa.pbb->paa->prnaa();
aaa.pbb->paa->n = 5;
aaa.pbb->paa->prnaa();
cin.get();
return 0;
}
[COLOR="Red"]Данная реализация, как и предыдущие, хоть и компилируется, но является в корне неверным решением проблемы. Уважаемые люди, способные случайно прочитать этот пост, не вопринимайте это решение всерьез и не пытайтесь повторить, это опасно для для общей структуры программы.[/COLOR]
А какая реализация будет являться правильной?
И все же меня интересует несколько инное решение :
мне надо что б каждый из 2 классов "понимал" тип другого класса (что бы в теле каждого из классов можно бы было использовать тип другого класса). Например есть 2 формы[A,B] и надо что б по событию из тела каждой из форм, с помощью pointer'а на другую форму можно бы было к ней обратиться.
Спасибо!
Надо что бы классы A и B были не в одном а в разных файлах
Вообще читай ссылку.
А? чего?:confused:
Уточнение
Забанить бы тебя насовсем, шутник хренов. Да уж больно у нас модеры гуманные... Ты языки-то хоть различаешь?
А че я? Зачем ругаться? Не меня надо банить,...
А как же сделать?
/////////////////////////////////// File1.h //////////////////////////////////////////////
#ifndef __FILE_1_H__
#define __FILE_1_H__
#include <iostream>
class B;
class A
{
public:
A() {std::cout << "A created" << std::endl;}
B* m_bPtr;
void setb(B* bb) {m_bPtr = bb;}
void prna() {std::cout << "A prn" << std::endl;}
void cira() {for (int j=0;j<10;j++) for (long i=0;i<100000;i++) m_bPtr->prnb();}
};
#endif
/////////////////////////////////// File2.h //////////////////////////////////////////////
#ifndef __FILE_2_H__
#define __FILE_2_H__
#include <iostream>
class A;
class B
{
public:
B() {std::cout << "B created" << std::endl;}
A* m_aPtr;
void seta(A* aa) {m_aPtr = aa;}
void prnb() {std::cout << "B prn" << std::endl;}
void cirb() {for (int j=0;j<10;j++) for (long i=0;i<100000;i++) m_aPtr->prna() ;}
};
#endif
/////////////////////////////////// mymain.cpp //////////////////////////////////////////
#include "File1.h"
#include "File2.h"
void main()
{
A *a1 = new A;
B *b1 = new B;
b1->seta(a1);
a1->setb(b1);
//a1->m_bPtr->m_aPtr->prna();
a1->cira();
b1->cirb();
std::cin.get();
}
Цитата: sealmu
А че я? Зачем ругаться? Не меня надо банить,...
Поясню:
1) Прочитай правила постинга в раздел студентам, и в частности, про теги [ code] [ /code] (без пробела в скобках).
2) Выбери язык, С++ или С#, и прочитай по нему, хоть по основам, книгу, благо ссылок полно в прилепленной теме раздела. А тот код, что ты тут выше приложил, советую перенести в юмор:).
[color=red]Предлагаю модератору закрыть тему.[/color]