Proste pytanie: Funkcje inline w plikach nagłówkowych.

Odpowiedz Nowy wątek
2011-08-06 09:44
0

W pliku nagłówkowym klasy "A" chcę utworzyć objekt klasy "B" w funkcji inline.
Plik nagłówkowy klasy B dołączam w pliku nagłówkowym klasy A.

Dlaczego:
Wyskakuje mi błąd, że nie "nie widzi odpowiedniej nazwy" (konstruktor klasy B)?
Jak to obejść?

edytowany 1x, ostatnio: marcos3131, 2011-08-06 09:46

Pozostało 580 znaków

2011-08-06 12:21
0

Pokaż te pliki nagłówkowe,bo wróżbitami nie jesteśmy.Mogę powiedzieć ze swojej strony tyle,że u mnie działa:
test1.h

#ifndef TEST1_H
#define TEST1_H
#include "test2.h"
 
class A
{
    B *pointer;
 
public:
    A(void)
    {
        pointer=new B;
    }
};
#endif

test2.h

#ifndef TEST2_H
#define TEST2_H
 
class B
{
public:
    B(void)
    {}
};
#endif

i gdzieś w main:

A aa;

"Sugeruję wyobrazić sobie Słońce widziane z orbity Merkurego, a następnie dupę tej wielkości. W takiej właśnie dupie specjalista ma teksty o wspaniałej atmosferze, pracy pełnej wyzwań i tworzeniu innowacyjnych rozwiązań. Pracuje się po to, żeby zarabiać, a z resztą specjalista sobie poradzi we własnym zakresie, nawet jeśli firma mieści się w okopie na granicy obu Korei."
-somekind,
konkretny człowiek-konkretny przekaz :]
edytowany 1x, ostatnio: MasterBLB, 2011-08-06 12:22

Pozostało 580 znaków

2011-08-06 12:31
0

Po to są pliki nagłówkowe, żeby mieć informacje o metodach i polach danej klasy, a nie ich treści. Rozdziel nagłówki od kodu, includuj tylko nagłówki, w razie potrzeby zrób predeklarację klasy:

class A;
class B;

Przed deklaracją samej klasy, która używa innej klasy. Wtedy nagłówek będzie wiedział, że w programie jest taka klasa, której "później" poszuka (w pliku nagłówkowym nie potrzebuje dokładnego opisu jej pól i metod, jedynie informacji że taka w ogóle istnieje) , a w pliku .cpp dopiero odwołujesz się do konstruktora innej klasy.

Racja,ale pytającemu się wyraźnie chodzi o funkcję inline.Stąd taka a nie inna definicja konstruktora klasy A - MasterBLB 2011-08-06 12:34

Pozostało 580 znaków

2011-08-06 13:25
0

Chyba wiem na czym polega błąd.
Używam w klasie A operatora zakresu
new B::B(), ponieważ w A mam metodę o takiej samej nazwie - B()
i zamiast objekt, chce mi stworzyć konstruktor...
Zmieniłem nazwy funkcji i działa.

edytowany 4x, ostatnio: marcos3131, 2011-08-06 13:49

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0