【发布时间】:2013-09-12 07:57:08
【问题描述】:
我有以下情况:
template <class A, typename B, typename C, class D>
class Base
{
public:
// ctor and virtual dtor
// functions
class Inner
{
//...
};
protected:
// members
};
template <class E>
class Sub : public Base<std::string, float, double, E>
{
public:
// ctor and virtual dtor
// functions using Inner class inherit from Base
};
虽然 msvc 编译得很好(带有 ctp nov 2012 编译器的 Visual Studio 2012),但 gcc(从主干构建 4.9.0)抱怨从 Base 使用的每个成员以及来自 Base 的内部类。
我注意到 msvc 在模板方面非常轻松,但是我还需要在 linux 下使用 gcc 运行和编译这段代码。那么,msvc 接受但 gcc 不接受的伪代码在哪里?
【问题讨论】:
-
这可能是一个从属名称问题。您可能需要指定
Base::theMethodName()或this->theMethodName()。但是你应该至少包含一个导致错误的行。 -
请提供SSCCE。 猜测:你可能需要一些
typename -
您是否尝试使用
g++ -c编译您的sn-p 并且确实失败了?因为它在 g++ 4.8 中编译得很好