0

这可以很好地作为 x64 VS100(MSVC++ 2010)上的函数声明的参数构建,但在 RHEL5(gcc 4.1.2)上失败:

const std::vector<std::pair<std::string, std::string> >& = std::vector<std::pair<std::string, std::string> >()

自有人问起的整个功能是(所述参数是第三个):

    bool func(const std::string&, const std::vector<int>&, const std::vector<std::pair<std::string, std::string> >& = 
        std::vector<std::pair<std::string, std::string> >(), const std::vector<std::string>& = std::vector<std::string>(), 
        const std::vector<std::string>& = std::vector<std::string>(), const std::vector<double>& = std::vector<double>(), 
        const std::vector<double>& = std::vector<double>(), const std::vector<double>& = std::vector<double>(), 
        const std::vector<double>& = std::vector<double>(), const std::vector<double>& = std::vector<double>(), 
        const std::string& = "", const std::string& = "", const std::string& = "") const;

我在 RHEL5 gcc-4.1.2 上遇到的错误是:

line #: error: expected ',' or '...' before '>' token
line #: error: wrong number of template arguments (1, should be 2)
line #: error: template argument 1 is invalid
line #: error: template argument 2 is invalid

请注意,这在两个平台上都可以正常编译,并将第三个参数替换为:

std::vector<std::string>& = std::vector<std::string>()

我目前的解决方法是使用后一种形式并稍微改变我的实现以解决它,这目前可以完成工作。但是,对于为什么原始用法未能在 RHEL5 gcc-4.1.2 上构建以及正确用法的任何想法都非常感谢。谢谢你。

4

2 回答 2

1

代码是正确的。您所拥有的很可能是 GCC 4.1 中的一个错误。非古代版本的 GCC 可以很好地编译这段代码。

除此之外,请确保您确实包含了您需要的标题:

#include <vector>
#include <string>
#include <utility> // for std::pair
于 2013-09-19T15:04:19.360 回答
1

我的猜测是你没有包括<vector>.

在一个编译器上,它被其他一些头文件间接包含,因此声明编译。

另一方面,它只看到了 的声明std::vector,指定了两个模板参数,而不是完整的定义,指定了第二个的默认值;所以编译器抱怨应该有第二个。

确保你包括那个,and also <string>and <utility>for std::stringand std::pair

于 2013-09-19T15:08:19.757 回答