私は長い時間前に書かれたVisual C++(Visual Studio 7.1バージョン)とインテルC++コンパイラ11.0でコンパイルされたC++コードを移植しています。ターゲットプラットフォームはLinux(Suse x86- 64)、GCC 4.3.2インテルC++コンパイラー11.1C++テンプレートクラスの継承
の問題点は、この
ようなそのコードされ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に、それは確かに依存してはいけませんalthow
#include "FileB.h"
int main()
{
B<float> b = B<float>();
}
は、Linuxの(インテルC++ 11.1、GCC 4.3.2)でコンパイルが、完全にWindowsの(のVisual C++ 7.1、インテルC++ 11.0)にコンパイルされませんプラットフォーム上。 GCCは、foo1()をfoo1(T a)に変更すると動作しますが、コードを変更することはできません。また、最終リリースにはIntel C++を使用する必要があります。
アドバイスをお寄せいただければ幸いです。
はい、その作業は、ありがとうございます。 Windows上のVisual C++とIntel C++ 11.0でこのコードがうまくいかない理由はまだありますか? – nexx
@nexx:Visual C++は従属名に悪名高いものです。これは**標準ではありません**と**変化する可能性はありません**。 'typename'を忘れたり、従属関数呼び出しを明示的に修飾することを忘れてしまい、うまく動作しません。 –
Visual C++(7.1)が標準外であることに驚くことはありませんが、Windowsバージョンが11.0、Linusバージョンが11.1であることを考慮して、インテルC++についてもっと驚いています。 – nexx