为什么vector.size()函数会给我一个错误?

时间:2014-02-21 18:35:49

标签: c++ vector lambda

当我尝试使用vector.size()时,它会给我以下错误:

In function 'int main()':
[Error] expected unqualified-id before '(' token
[Error] expected primary-expression before ')' token
[Error] lambda-expression in unevaluated context
[Error] expected identifier before numeric constant
In lambda function:
[Error] expected '{' before ')' token

其余的矢量函数都有效。我之前使用过这个功能而且它有效,现在我无法使用它。

这是代码:

while(1)
{
    vector<string> frase;
    string stringa;
    getline(cin,stringa);
    {
           string temp;
           temp.clear();
           for(int i=0;i<stringa.length();i++)
           {
                if(stringa[i]!=' ')temp+=stringa[i];
                else
                {
                    frase.push_back(temp);
                    temp.clear();
                 }
           }
           frase.push_back(temp);
    }


    analizza(frase.data(), /*ERROR HERE*/ frase.size() /*ERROR HERE*/);

           frase.clear();


    for(int i=0;i<frase.size();i++)frase.pop_back();
}

我该怎么办?

3 个答案:

答案 0 :(得分:6)

您正尝试在此处声明一个具有运行时大小的数组:

string parole[frase.size()];

C ++不支持这一点。看起来您的编译器正在将其作为lambda表达式进行解释。

您根本不需要数组 - 只需使用frase即可。或者,如果您的函数确实需要将指针作为输入,请使用frase.data()

while(1)
{
    vector<string> frase;
    string stringa;
    getline(cin,stringa);
    {
        //same as before
    }

    analizza(frase.data(), frase.size());

    frase.clear();
}

答案 1 :(得分:0)

您的代码总体上存在一些问题:

<强>解析

string stringa;
getline(cin,stringa);
{
       string temp;
       temp.clear();
       for(int i=0;i<stringa.length();i++)
       {
            if(stringa[i]!=' ')temp+=stringa[i];
            else
            {
                frase.push_back(temp);
                temp.clear();
             }
       }
       frase.push_back(temp);
}

这段代码完全没必要。整个逻辑可以像这样完成:

std::string line;
std::getline(std::cin, line);
std::istringstream iss(line);
std::istream_iterator<std::string> start(iss);
std::istream_iterator<std::string> end;
std::vector<std::string> v(start, end);

可变长度数组

VLA不是标准的(某些编译器将它们作为扩展,但 可移植)。以下代码不会在标准编译器上编译:

string parole[frase.size()];

相反,如果你想要一个不确定大小的数组,你可以使用std::vector(你已经拥有它,所以不需要做任何事情)。如果您尝试调用的函数需要指针,则可以使用v.data()(如果使用的是支持C ++ 11的编译器)或&v[0](如果需要在C +下编译) +03标准)。

答案 2 :(得分:0)

如果你想要一个字符串数组而不是一个向量,你必须使用char []或char *并动态分配。您无法使用变量创建数组大小。