gpt4 book ai didi

c++ - 学习STL的一些问题

转载 作者:太空狗 更新时间:2023-10-29 20:18:21 25 4
gpt4 key购买 nike

我在 Ubuntu 的 CodeBlocks IDE 中使用 g++。我是 STL 和 C++ 的新手。

Q1://已回答

std::istream_iterator< std::string > begin ( dictionaryFile );
std::istream_iterator< std::string > end;
std::vector< std::string> dictionary;
std::copy ( begin, end, std::back_inserter ( dictionary ) );

是正确的,但是当我改变的时候

std::istream_iterator< std::string > end;

进入

std::istream_iterator< std::string > end();

编译器在第四行说没有匹配的函数调用。

Q2://不好意思第一次没把问题说清楚

struct PS : std::pair< std::string, std::string > {
PS();
static struct FirstLess: std::binary_function< PS, PS, bool> {
bool operator() ( const PS & p, const PS & q ) const {
return p.first < q.first;
}
} firstLess1; };


struct FirstLess: std::binary_function< PS, PS, bool> {
bool operator() ( const PS & p, const PS & q ) const {
return p.first < q.first;
}} firstLess2;

请注意,firstLess1 和 firstLess2 之间的唯一区别是 firstLess1 是在 PS 中声明的。

当我调用函数时:

k = std::find_if ( j + 1, finis, std::not1 ( std::bind1st ( PS::firstLess1, *j ) ) );

编译器给我一个错误“对 PS::firstLess1 的 undefined reference ”。然后我改成了

k = std::find_if ( j + 1, finis, std::not1 ( std::bind1st ( firstLess2, *j ) ) );

然后它通过了编译。

更奇怪的是,在程序的其他部分,我都使用了

j = std::adjacent_find ( j , finis, PS::firstLess1 );
j = std::adjacent_find ( j , finis, firstLess2 );

而且编译器没有给我报错。

最佳答案

std::istream_iterator< std::string > end(); C++ 将此解释为名称为 end 的函数声明返回值类型为 std::istream_iterator< std::string >并且参数列表为空。这就是为什么你会得到这样的错误。在 C++ 中,要通过调用其类的默认构造函数来创建任何对象,您必须这样做 type_name variable_name; . type_name variable_name();将被解释为函数声明。

关于c++ - 学习STL的一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4296090/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com