Ich habe ein Projekt, das mit GCC-4.4.7 und GCC-4.9.0 kompiliert werden muss.Übergabe der Vorlagenklasse als Vorlagevorlagenparameter innerhalb der Klassenmitgliedsfunktion
Wir verwenden einen Code, der eine Vorlagenklasse als Vorlagenschablonenparameter an eine andere Klasse übergibt. Während der Code bei GCC-4.9.0 gut kompiliert wird, schlägt er bei GCC-4.4.7 fehl. Hier
ist eine Reproduktion des Fehlers:
#include <iostream>
using namespace std;
struct E
{
int a;
E(int b) : a(b) {}
};
template<template<int B> class C, int D> struct A
{
void print()
{
E e(D);
cout << e.a << endl;
}
int a;
};
template<int B> struct C
{
const static int a = B;
void print()
{
A<C, B> a;
a.print();
}
};
int main() {
C<3> c;
c.print();
return 0;
}
Auf Compilation:
[[email protected] ~]$ g++-4.9 Test.cpp -o Test
[[email protected] ~]$
[[email protected] ~]$ g++-4.4 Test.cpp -o Test
Test.cpp:43: error: type/value mismatch at argument 1 in template parameter list for ‘template<template<int B> class C, int D> struct A’
Test.cpp:43: error: expected a class template, got ‘C<B>’
Test.cpp:43: error: invalid type in declaration before ‘;’ token
Test.cpp:44: error: request for member ‘print’ in ‘a’, which is of non-class type ‘int’
Wie der Fehler beheben und es ordnungsgemäß mit GCC-4.4.7 zu kompilieren bekommen?
NB: nur ++ 98 Standard-C, ist der Code sehr alt.
Wow !! Das wusste ich nicht !! Damm der Compiler muss archaisch sein. Danke Mann, du bist ein Lebensretter –