我可以处理移植平台相关的功能.我有一个问题,我在
Linux上尝试的编译器(clang和g)不接受以下代码,而msvc编译器执行:
template <class T> class Base { protected: T Value; }; template <class T> class Derived : public Base<T> { public: void setValue(const T& inValue){ Value = inValue; } }; int main(int argc,char const *argv[]) { Derived<int> tmp; tmp.setValue(0); return 0; }
g错误:
main.cpp: In member function ‘void Derived<T>::setValue(const T&)’: main.cpp:11:3: error: ‘Value’ was not declared in this scope
我相信这是由于在第二类中使用了非依赖名称(Value). More information.
问题是我有一个非常大的代码库,其中经常使用这种类型的代码.我明白看标准时错了.然而,不必写这个 – >非常方便.或者基础< T> ::在每次使用Value之前.甚至用Base< T> :: Value写作;当您使用~20个基类成员时,在派生类的开头是有问题的.
所以我的问题是:是否有适用于Linux的编译器允许这种代码(有或没有额外的编译器开关)?或者是否有一些小修改可以让这些代码在Linux上编译?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。