我有一段模板化的 C++ 代码可以在 Visual Studio 2010 上很好地编译,但不能在 Linux GCC 上编译。代码对我来说看起来不错,所以我的问题是:我在这里做错了什么?
这是给出错误的代码(我删除了所有不相关的东西,只得到有问题的部分):
class CaseInsensitiveCompare
{
public:
bool operator() (const RString& first, const RString& second) const;
};
template <typename T>
T CombinedValue<T>::getUpgradedSettingValue(const T& defaultValue, const UpgradeList& upgrades, const RString& className) const
{
std::map<RString, CombinedSetting<T>, CaseInsensitiveCompare> myMap;
std::map<RString, CombinedSetting<T>, CaseInsensitiveCompare>::iterator myIter;
}
这编译和功能很好,但在 Linux 上的 GCC 上给出了编译错误。我从编译器得到的错误是应该有一个; 在myIter之前。所以奇怪的是与myMap的行很好,但与myIter的行不是。如果我用myMap删除该行,我仍然会遇到完全相同的问题。
我在这里做错了什么?我目前的预感是,这是 GCC 编译器本身的一个错误,但如果是这种情况:我该如何解决这个问题?