Я портировал некоторый код C ++, который был написан давно, и обычно компилируется с Visual C ++ (версия Visual Studio 7.1) и Intel C ++ Compiler 11.0, целевой платформой является Linux (Suse x86-64), сGCC 4.3.2 и Intel C ++ Compiler 11.1
Проблема заключается в том, что такой код
FileA.h
template<typename T, int dim>
class A
{
public:
A(){};
~A(){};
protected:
void foo1(){};
}
FileB.h
#include "FileA.h"
template<typename T>
class B : public A<T, 2>
{
public:
B(){};
~B(){};
void foo(){ foo1(); }
}
main.cpp
#include "FileB.h"
int main()
{
B<float> b = B<float>();
}
не компилируется в Linux (Intel C ++ 11.1, GCC 4.3.2), но прекрасно компилируется в Windows (Visual C ++ 7.1, Intel C ++ 11.0), но, безусловно, не должензависит от платформы.GCC сообщает, что если я изменю foo1 () на foo1 (T a), он будет работать (и он работает), но я не могу изменить код и должен использовать Intel C ++ для окончательного выпуска.
Я быБуду рад, если кто-нибудь сможет помочь с любым советом.