Pēcis Beisikāns' Journal
View:Personal Journal.
View:Friends.
View:Calendar.
Missed some entries? Then simply jump to the previous day or the next day.

Monday, January 7th, 2008

Subject:C++: cirkulārā iekļaušana
Time:1:12 pm.
Kāpēc, ja es veicu cirkulāru iekļaušanu, kompilators vairs neatpazīst tipus? Kā panākt, lai B klases objekti spētu operēt ar A klases objektiem?
A.h
#pragma once // ļauj failu iekļaut tikai vienreiz. ķipa #ifndef __A_H__ bla bla
#include "B.h"
class A
{
public:
    B b; // syntax error : missing ';' before identifier 'b'
};

B.h
#pragma once
#include "A.h" // ja šo rindu atkomentētu, kods nokompilētos
class B { };

main.cpp
#include "A.h"
int main()
{
    A a;
    return 0;
}

Risinājums

B.h failā neiekļaut A.h, bet veikt forward deklarāciju un izvākt no B.h visas lietas, kam ir nepieciešama A klases definīcija (piemēram, metožu izsaukumi inline funkcijās). Tad B.cpp failā iekļaut nevis B.h, bet A.h.
Comments: Read 11 or Add Your Own.

Pēcis Beisikāns' Journal

View:User Info.
View:Friends.
View:Calendar.
View:Memories.
Missed some entries? Then simply jump to the previous day or the next day.