答案1
IDE 中的语法检查器并非 100% 可靠。它们正在变得越来越好,但 100% 的准确性是无法实现的,尤其是对于允许预处理器宏等的 C 和 C++ 等语言而言。
某些 #include 内容的组合,与名称空间和宏扩展相结合,可能会抛出语法检查器,即使代码实际上是正确的。
代码或包含内容中的某处的错误(或只是警告)也可能会在源文件中进一步创建虚假的语法警告。
这不仅是 Visual Studio 的问题。任何具有语法高亮/检查功能的 IDE 或编辑器都可能出现这种情况。我还看到过这种情况在 XCode、Eclipse 和 CodeBlocks 中发生,这只是几个例子。
一般来说:如果您遇到类似情况,通常表明定义声明的源代码(在您的情况下定义explode()的include)可能以不清楚、含糊甚至错误的方式编写。即使它针对您在源代码中对explode()的特定用途进行编译,也可能无法针对所有可能的用例进行编译。
您应该考虑重新编写该代码,使其不再显示红线。这会让稍后需要处理该代码的其他程序员感到困惑。如果您几个月后需要重新查看代码,并且已经完全忘记了这一点,那么另一个程序员可能就是您。
答案2
这绝对是 VS 2017 中的一个错误。为了测试,我删除了包含函数并将其放入源代码主体中:因此红线消失了。最令人印象深刻的是:在重新激活该函数并将其从源代码中删除后(即所有内容与之前完全相同),VS 不再显示红线,无论是对于该函数还是对于之前出现相同红线的其他函数...
出于好奇,这里是该函数:
vector<string> explode(string linha, string delim) {
vector<string> parte;
size_t pos = 0,pos2 = 0;
do {
pos2 = linha.find(delim, pos);
parte.push_back(linha.substr(pos, pos2-pos));
pos = pos2+1;
} while(pos2 != string::npos);
return parte;
}
我不认为问题出在我的代码上......