繁体   English   中英

请求Y的非类Z的成员X

[英]Request for member X of Y which is of non-class type Z

尝试编译以下C ++代码段时(下面的完整源代码)

A::A(istream& i) {
    vector<string> words( istream_iterator<int>(i), istream_iterator<int> );
    words.begin();
 }

我遇到了错误

istream_it.cpp:12: error: request for member ‘begin’ in ‘words’, which is of non-class type 
‘std::vector<int, std::allocator<int> >(
    std::istream_iterator<int, char, std::char_traits<char>, long int>,
    std::istream_iterator<int, char, std::char_traits<char>, long int>)’

我知道此错误通常是由于意外地使用no-parameters运算符声明了一个函数所致,例如

string s(); s.size();

但是在这种情况下,我已经剥离了所有不必要的代码,仍然看不到究竟出了什么问题,或者正确的语法是什么。

完整资料:

#include <sstream>
#include <vector>
#include <iterator>
#include <string>

using namespace std;

class A {
public:
    A(istream& i) {
        vector<int> words(istream_iterator<int>(i), istream_iterator<int> );
        words.begin();
    }
};


int main(int argc, char** argv)
{
    istringstream iss("1 2 3");
    A a(iss);

    return 0;
}

正确,

vector<int> words(istream_iterator<int>(i), istream_iterator<int> );

这是一个名为word的函数,它带有两个istream_iterator<int>参数,其中一个名为i,另一个没有名称,然后返回向量。 更改为此:

vector<int> words((istream_iterator<int>(i)), istream_iterator<int>() );

添加的第一个括号(istream_iterator<int>(i))使其成为表达式,因此不会出现歧义。 其他括号istream_iterator<int>()是必需的,因为您构造了一个临时的。 istream_iterator<int>这样的类型本身不会构造临时类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM