在此示例代码中,<fstream>
可以正常工作,但<string>
不能:(注释错误)
#include <iostream>
#include <fstream>
#include <string>
int main(){
using namespace std;
string line; //incomplete type is not allowed
ifstream ifile("test.in");
if(ifile.is_open()){
while(ifile.good()){
getline(ifile,line); //identifier "getline" is undefined
}
}
}
当我将代码更改为以下内容时,错误getline()
变为“ 名称空间“ std”没有成员“ getline” ”:
int main(){
std::string line; //incomplete type is not allowed
std::ifstream ifile("test.in");
if(ifile.is_open()){
while(ifile.good()){
std::getline(ifile,line); //namespace "std" has no member "getline"
}
}
}
此代码“修复”了string line
声明的错误:
std::string* line;
或:
using namespace std;
string* line;
答案 0 :(得分:0)
我有两次类似的事情。在项目中意外地创建一个空的“ vector”,“ set”,“ map”等文件非常容易,尤其是如果您意外地将源代码粘贴到终端上(幸运的是,我们包含<string>
而不是{{ 1}})。
Visual c ++将很乐意使用空标头而不是标准标头,而不会给出任何警告。在解决方案目录中扫描名为vector的文件。
如果这样做没有帮助,Visual Studio会显示一个调试模式,显示所有包含的文件。
如果这是gcc或clang,则可以使用-E标志而不是-c运行编译器。这将创建一个文本文件,其中所有包含的文本都在一个文件中(或在stdout上)。这将为您提供提示。这就是我找到空的“设置”文件的方式。
答案 1 :(得分:0)
感谢大家的帮助。我解决了问题,但我仍然不知道是什么原因。我不知道这是否是编译器的配置(可能不是因为其他头文件工作正常)。我认为编译器没有损坏,因为重新安装后问题仍然存在。
重新安装整个Visual Studio代码并完成重新配置编译器和构建选项后,该问题得到了神奇的解决。