【问题标题】:Not able to insert elements into a set in c++无法将元素插入c ++中的集合
【发布时间】:2011-12-26 06:09:38
【问题描述】:

我已经写了一个示例程序。如下:

#include<iostream>
#include<string>
#include<set>
using namespace std;

int main()
{

std::set<std::string> m;
m.insert("1-2-1-1");

return 0;
}

这可以完美运行,没有任何错误。

但我尝试创建一个集合并尝试在我的应用程序代码中将元素插入其中,这给了我一些错误。

        /export/SunStudio/SUNWspro/bin/CC -c -compat=5 -features=no%altspell -features=no%export -mt +d  -DTHREAD -DSOLARIS -staticlib=rwtools7 -library=rwtools7,iostream -DOWTOOLKIT_WARNING_DISABLED -Bsymbolic -PIC  -g0 -DBPDEBUG  -I.  -I../nls  -I../../cnacore/api  -I../../cnacore/external  -I../../cnacore/stl  -I../../cnabp/kernel  -I/vobs/oss_design/sab/inc  -I/vobs/oss_design/tbs/inc  -I/vobs/oss_design/tss/inc  -I/vobs/oss_design/tds/inc  -I/vobs/oss_design/eam/inc  -I/vobs/ossrc_3pp/cif_3pp/borland_enterprise_server/include  -I/vobs/ossrc_3pp/cif_3pp/borland_enterprise_server/include/stubs  -I/vobs/ossrc_build_dependencies/extracted_packages/ERICsnlm/include  -I/vobs/ossrc_3pp/cif_3pp/sybase_ase/OCS-15_0/include  -I/vobs/cna/src/features  cacup_bsc.cc
"cacup_bsc.cc", line 6545: Error: Multiple declaration for valid.
"cacup_bsc.cc", line 6545: Error: "," expected instead of ".".
"cacup_bsc.cc", line 6548: Error: Multiple declaration for valid.
"cacup_bsc.cc", line 6548: Error: "," expected instead of ".".
"cacup_bsc.cc", line 6552: Error: std::set_intersection<std::InputIterator1, std::InputIterator2, std::OutputIterator>(std::InputIterator1, std::InputIterator1, std::InputIterator2, std::InputIterator2, std::OutputIterator) is not a static data member.
"cacup_bsc.cc", line 6552: Error: Cannot use std::insert_iterator<std::set<std::string>> to initialize int.
"cacup_bsc.cc", line 8903: Warning: A non-POD object of type "bpDU" passed as a variable argument to function "std::sprintf(char*, const char*, ...)".
"cacup_bsc.cc", line 8906: Warning: A non-POD object of type "bpDU" passed as a variable argument to function "std::sprintf(char*, const char*, ...)".
6 Error(s) and 2 Warning(s) detected.
*** Error code 6
clearmake: Error: Build script failed for "cacup_bsc.o"

下面是我添加的代码。 但是注释下面的代码后编译成功

/*
std::set<std::string> valid;
valid.insert(string("1-1"));

std::set<std::string> planned;
valid.insert(string("1-1"));

std::set<std::string> result;

std::set_intersection(valid.begin(), valid.end(), planned.begin(), planned.end(), std::inserter(result, result.end()));
*/

        /export/SunStudio/SUNWspro/bin/CC -c -compat=5 -features=no%altspell -features=no%export -mt +d  -DTHREAD -DSOLARIS -staticlib=rwtools7 -library=rwtools7,iostream -DOWTOOLKIT_WARNING_DISABLED -Bsymbolic -PIC  -g0 -DBPDEBUG  -I.  -I../nls  -I../../cnacore/api  -I../../cnacore/external  -I../../cnacore/stl  -I../../cnabp/kernel  -I/vobs/oss_design/sab/inc  -I/vobs/oss_design/tbs/inc  -I/vobs/oss_design/tss/inc  -I/vobs/oss_design/tds/inc  -I/vobs/oss_design/eam/inc  -I/vobs/ossrc_3pp/cif_3pp/borland_enterprise_server/include  -I/vobs/ossrc_3pp/cif_3pp/borland_enterprise_server/include/stubs  -I/vobs/ossrc_build_dependencies/extracted_packages/ERICsnlm/include  -I/vobs/ossrc_3pp/cif_3pp/sybase_ase/OCS-15_0/include  -I/vobs/cna/src/features  cacup_bsc.cc
"cacup_bsc.cc", line 8902: Warning: A non-POD object of type "bpDU" passed as a variable argument to function "std::sprintf(char*, const char*, ...)".
"cacup_bsc.cc", line 8905: Warning: A non-POD object of type "bpDU" passed as a variable argument to function "std::sprintf(char*, const char*, ...)".
2 Warning(s) detected.

下面是我添加的代码:

std::set<std::string> valid;
valid.insert(string("1-1"));

谁能给我正确的方向?

下面是编译标志:

/export/SunStudio/SUNWspro/bin/CC -c -compat=5 -features=no%altspell -features=no%export -mt +d  -DTHREAD -DSOLARIS -staticlib=rwtools7 -library=rwtools7,iostream -DOWTOOLKIT_WARNING_DISABLED -Bsymbolic -PIC  -g0 -DBPDEBUG

但是对于示例程序,我只是像下面这样编译:

/export/SunStudio/SUNWspro/bin/CC 0001.cc

【问题讨论】:

  • This 编译,向我们展示你的真实代码。
  • 以目前的形式回答这个问题会相对困难。您是否能够汇总一个最小的测试用例,我们可以通过编译器运行该测试用例来产生您所看到的错误?
  • @als.i 知道这段代码在直接使用时确实可以编译。这就是为什么我不得不问这个问题。我怀疑可能是我编译的方式造成了问题。仅供参考,我在现有代码之间添加了完全相同的行。我还粘贴了编译标志。
  • @peter:但你没有在你的问题中提到这一点,也没有提供任何可能帮助我们知道你想问什么的相关信息。如果你不问我们只能推测。请提供所有您提出的问题中的信息。
  • @als.. 我已经猜到了,这就是为什么我在这里发布这个希望得到一些启示。添加了更多信息。

标签: c++ stl set


【解决方案1】:

听起来您在同一个函数中有两个名为“有效”的变量。将新变量重命名为 valid2 或将代码更改为仅使用名为 valid 的单个变量,并带有单个声明。

你不能只写像valid.insert(string("1-1")); 这样的代码,除非它在函数内部。在下面的评论中,您说它不在函数中。你需要找到一些std::set&lt;std::string&gt;的构造函数,和调用insert的效果一样。

【讨论】:

  • 您的文件至少有 6544 行。那是糟糕的。您正在调试的功能多长时间?也许你在想一个你还没有想到的名字时遇到了麻烦?为什么不发布功能?
  • 我没有在函数中添加行。我在#includes 下方添加了行。
  • 这很好地解释了问题。请参阅我刚刚添加的答案中的第二段。
【解决方案2】:

很可能,您在范围内有另一个valid 声明,因此出现多重声明错误。

【讨论】:

  • 不,我尝试为它保留任何名称。它给了我同样的错误。
猜你喜欢
  • 1970-01-01
  • 2011-04-02
  • 2021-08-14
  • 2016-08-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多