hilpers


  hilpers > comp.lang.* > comp.lang.c

 #1  
26.07.2009, 21:00
Wojciech Muła
Takie coś nie kompiluje się w gcc 4.3.3:

template<typename X>
class A {
public:
typedef int type;
type foo();
};

/* "expected constructor, destructor,
or type conversion before 'A'" */
template<typename X>
A<X>::type A<X>::foo() {
return 0;
}

Jeśli zamiast A<X>::type wstawię int, to przechodzi.

Dlaczego tak jest?

w.
 #2  
26.07.2009, 22:00
Krzysiek Kowaliczek
Użytkownik Wojciech Muła napisał:
[ciach]
> A<X>::type A<X>::foo() {


typename A<X>::type A<X>::foo() {
^^^^^^^

Pozdrawiam
KK
 #3  
27.07.2009, 09:44
Wojciech Muła
Krzysiek Kowaliczek <krzysiek.kowaliczekREMOVE> wrote:

> Użytkownik Wojciech Muła napisał:
> [ciach]
> > A<X>::type A<X>::foo() {

>
> typename A<X>::type A<X>::foo() {
> ^^^^^^^


Dzięki!

w.
 #4  
28.07.2009, 08:43
Pawel Kierski
Wojciech Mula wrote:
> Krzysiek Kowaliczek <krzysiek.kowaliczekREMOVE> wrote:
>
>> Uzytkownik Wojciech Mula napisal:
>> [ciach]
>>> A<X>::type A<X>::foo() {

>> typename A<X>::type A<X>::foo() {
>> ^^^^^^^


Chyba sobie otaguje, jako temat do FAQ 8-)
 #5  
28.07.2009, 09:44
Mateusz Loskot
"Pawel Kierski" <news> wrote in message
news:1cu1
> Wojciech Mula wrote:
>> Krzysiek Kowaliczek <krzysiek.kowaliczekREMOVE> wrote:
>>
>>> Uzytkownik Wojciech Mula napisal:
>>> [ciach]
>>>> A<X>::type A<X>::foo() {
>>> typename A<X>::type A<X>::foo() {
>>> ^^^^^^^

>
> Chyba sobie otaguje, jako temat do FAQ 8-)



Co Ty na to aby po prostu przetlumaczy´c Q&A z FAQ w Comeau Comp.?

http://www.comeaucomputing.com/techt...ates/#typename

Pozdrawiam
 #6  
28.07.2009, 09:58
Pawel Kierski
Mateusz Loskot wrote:
> "Pawel Kierski" <news> wrote in message
> news:1cu1
>> Co Ty na to aby po prostu przetlumaczy´c Q&A z FAQ w Comeau Comp.?

>
> [..]


Nie wiem, czy koniecznie cale. W tym problemie chodzi w zasadzie tylko
o fragment:

<cytat>
template <typename T> class xyz {
void foo() { T::x * p; /* ... */ p = blah; }
};

Does this declare p as a pointer to, or does it multiply some
p somewhere by, T::x? If it should be a declaration, then you would
do this to make that clear:

template <typename T> class xyz {
void foo() { typename T::x * p; /* ... */ p = blah; }
};

Now we know that blah is being assigned to the local p in foo.
</cytat>
 #7  
28.07.2009, 21:27
Mateusz Loskot
Pawel Kierski wrote:
[..]
> Does this declare p as a pointer to, or does it multiply some
> p somewhere by, T::x? If it should be a declaration, then you would
> do this to make that clear:
>
> template <typename T> class xyz {
> void foo() { typename T::x * p; /* ... */ p = blah; }
> };
>
> Now we know that blah is being assigned to the local p in foo.
> </cytat>


Na tej podstawie urodzilem pytanie i odpowiedL:

"Do czego sluzy slowo kluczowe typename?"

http://pl.cpp.wikia.com/wiki/FAQ

Krytyka i poprawki mile widziane.

Pozdrawiam
Podobne wątki
typedef dla wskaznika do funkcji szablonowej

Witam, Potrzebuję stworzyć dwa typy, będące wskaźnikami do odpowiednich funkcji (bezargumentowej i argumentowej). Zatem utworzyłem typy: typedef void...

typedef w klasie

Cześć, dlaczego zdefiniowany przeze mnie typ b( przykład poniżej ) nie jest widoczny przez kompilator? Kod kompiluje się dopiero po umieszczeniu typedef int b; przed...

[C++] deklaracje i definicje funkcji składowych w klasie szablonowej

Witam. Mam sobie klase szablonowa: template<class t> class stos { unsigned short wysokosc; t** tablica; public: stos(unsigned short wysokosc) {// jakas tresc funkcji }

Zmienna static w klasie szablonowej

Mam klasę(w pliku nagłówkowym debug.hpp): template<std::ostream &OUT> class outTrace { public: (...) static int wciecie; };


Czasy w strefie GMT. Teraz jest 08:18. | Privacy Policy