Avatar billede knudx Nybegynder
06. september 2006 - 09:57 Der er 2 kommentarer

Problem med klasse afledt af en template

Jeg er begynder, men har googlet diverse tutorials m.m. om emnet. Jeg synes det virker ulogisk at følgende (hjernedøde eksempel-) kode ikke kan kompilere:

#import <iostream>
#import <vector>
using namespace std;

template< class T >
class a : public vector< T > {
public:
    void speak() {
        push_back( 4 );
        cout << at( 1 ) << endl;
    }
};

int main() {
    a< int > test;
    test.push_back( 3 );
    test.speak();
    return 0;
}

jeg får følgende fejl:

test.cpp: In member function 'void a<T>::speak()':
test.cpp:10: fejl: there are no arguments to 'push_back' that depend on a template parameter, so a declaration of 'push_back' must be available
test.cpp:10: fejl: (if you use '-fpermissive', G++ will accept your code, but allowing the use of an undeclared name is deprecated)
test.cpp:11: fejl: there are no arguments to 'at' that depend on a template parameter, so a declaration of 'at' must be available

Hvis jeg derimod retter "at( 1 )" til "this->at( 1 )" og "push_back( 4 )" til "this->push_back( 4 )", brokker compileren sig ikke.

Men egenskaber ved superklassen er da normalt tilgængelige i en underklasse,  uden brug af "this" ??
Avatar billede lars314 Nybegynder
06. september 2006 - 10:02 #1
Det virket fint her med BDS2006.
hvis jeg altså retter #import til #include.
Avatar billede knudx Nybegynder
06. september 2006 - 10:24 #2
aah, det er en compiler fejl, eller "feature" i gcc:

http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Name-lookup.html#Name-lookup

Tak fordi du ledte mig på sporet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester