GCC 4(.1.1) template osztaly szarmaztatasa template osztalybol...

 ( stentor | 2006. október 5., csütörtök - 14:48 )

ami 3.3.6-os GCC-vel eddig mukodott, az a 4-es verzioval nem ... hogyan lehetne megoldani, hogy megis menjen a kovetkezo dolog:
( a problema lenyege rem. latszik ebbol az egyebkent semmire sem jo peldabol :) )

// A.h
#ifndef A_H
#define A_H

template
class A
{
protected:
T a;
public:
A(T x)
{
a = x;
}
T x() const{return a;}
};

#endif

// B.h
#include "A.h"

template
class B : public A
{
private:
T b;
public:
B(T x):A(x)
{
b = x*2;
}
T y()
{
return a+b;
}
};

//main.cpp
#include "A.h"
#include "B.h"

#include
using namespace std;

int main()
{
B x(4);
cout< return 0;
}

//
a fordito uzenete:
B.h: In member function 'T B::y()':
B.h:15: error: 'a' was not declared in this scope

tulajdonkepp amiatt van ez, hogy B es A kapcsolata nem is-a kapcsolat(vagyis B nem leszarmazottja A-nek)... a kerdes az, hogy hogyan lehetne megis megoldani ezt 4-es GCC-vel...

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

a \lt class T \gt nem jelenik meg, de valójában ott van, ahol lennie kell :)

közben találtam valamit... igazából nem a GCC 4-es verziója hibázik, hanem a regebbi...

http://womble.decadentplace.org.uk/c++/template-faq.html#base-lookup

akartam is kérdezni, hogy a class B : public A-nál csak a fórummotor miatt nem látszik-e a <T>, de már látom sikerült megoldani a problémát :)

ui: használj <code> tag-et, hogy látszódjon az indentálás, a kacsacsőrt pedig &lt; / &gt;-vel tudod előidézni

jah... én is néztem egyet, mikor megláttam , hogy nincs &lt &gt :)

fejlett prog? :)

nem, nem Szegedre járok :D
csak munkahelyen 4.1.1-es gcc van, otthoni gépemröl áthúztam egy ion-atom ütközéses prg.-om kódját, hogy kicsit piszkáljam... mondjuk még vmikor ugyanezen prg. kapcsán a qt3->qt4 váltást is meg kell szenvednem :D