当我尝试使用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();
}
我该怎么办?
答案 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 *并动态分配。您无法使用变量创建数组大小。