我一直在移植一些很久以前编写的C ++代码,通常是使用Visual C ++(Visual Studio 7.1版)和Intel C ++ Compiler 11.0编译的,目标平台是Linux(Suse x86-64)和GCC 4.3。 2和Intel C ++编译器11.1

问题是这样的代码

文件A

template<typename T, int dim>
class A
{
 public:
  A(){};
  ~A(){};
 protected:
  void foo1(){};
}


文件库

#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 ++进行最终发行。

如果有人可以提供任何建议,我将非常高兴。

最佳答案

foo1不是从属表达式,因此不使用基类(从属类型)来解析foo1调用。

由于您无法更改代码,因此已被塞满。如果可以更改代码,则需要将表达式更改为从属。通常,这是通过将其更改为this->foo1()来完成的。

关于c++ - C++模板类继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4734057/

10-12 20:36