【发布时间】:2019-01-23 12:10:26
【问题描述】:
以下代码在 Linux 中运行正常,但在 Solaris 中出现编译器错误。我正在尝试初始化一个标准对,然后用它来初始化一个 C++ Map。它在 linux 中完美运行,但是 Solaris 遇到了这个问题。任何人都知道可以做些什么来使它在所有 UNIX 变体中都正常?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <map>
#define TRUE 1
#define FALSE 0
using namespace std;
std::pair<std::string, std::string> envVarsData[] =
{
std::make_pair(std::string("HOME"), std::string("home")),
std::make_pair(std::string("RETURNED"), std::string("Returned"))
};
size_t iSize = sizeof(envVarsData) / sizeof(envVarsData[0]);
std::map<std::string, std::string> envVarsMap(envVarsData, iSize);
int main()
{
return 0;
}
抛出的错误如下
# CC t1.cpp
"t1.cpp", line 21: Error: Could not find a match for std::map<std::string,std::string>::map(std::pair<std::string, std::string>[2], unsigned) needed in<no tag>.
1 Error(s) detected.
#
【问题讨论】:
-
map构造函数采用一对迭代器(例如指针),而不是指针和大小。 Makie 它std::map<std::string, std::string> envVarsMap(envVarsData, envVarsData + iSize); -
在 Solaris 上这仍然给出如下错误 # CC t1.cpp "t1.cpp", line 22: Error: Could not find a match for std::map<:string tag> 需要 :string>::map(std::pair<:string std::string>[2], std::pair<:string std::string>*)。检测到 1 个错误。
-
我认为如果我使用以下选项编译 CC -std=c++11 t1.cpp,上述错误就会消失。但是,任何不使用此选项编译它的建议总是受欢迎的!!!!
-
您是否使用了任何特定的标志,例如 -std=c++11 我在 SOLARIS 中构建并且没有上述编译标志就无法编译。该代码显示 linux 中没有问题
标签: c++ stl stdmap std-pair solaris-10