c++ - 错误无效的用户定义转换

标签 c++ io compiler-errors

#include <iostream>
#include <sstream>
#include <fstream>
#include <string.h>

using namespace std;

int main(int argc, char* argv[])
{
    if(argc != 3)
    cout<< "Error! Not enough file!"<<endl;
char** words = new char* [10];
char** page = new char* [10];
string line;
char* key = "<-1>";
ifstream input (argv[1]);
while(strcmp(std::getline(input, line), key) != 0)
{

}
return 0;
}

所以当我尝试运行这个时(当然还没有完成)。编译器一直给我这样的错误

/home/ds/DataStructuresRepo/Project2/untitled/main.cpp:17: error: invalid user-defined conversion from 'std::basic_istream<char>' to 'const char*' [-fpermissive] while(strcmp(std::getline(input, line), key) != 0) ^

我做错了什么?

最佳答案

std::getline 返回 std::basic_istream& .它将读取的内容写入 line你路过。 strcmp 需要两个 const char*秒。您不能只将第一个的结果传递给第二个——这些类型是不可转换的(因此出现关于没有从 std::basic_istream<char> 转换为 const char* 的错误)。

因为你得到一个 std::string无论如何,你可以使用它的 operator==直接:

while (std::getline(input, line) && line != key)
{
}

关于c++ - 错误无效的用户定义转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32831904/

相关文章:

objective-c - 隐式转换为NSIndexPath的错误

c++ - 如何使用 ODBC 获取整数值?

c++ - 可以禁用使用 SetWindowsHookEx 运行时创建的 Hook 吗?

loops - Haskell - 我如何摆脱互动?

java - 使用可序列化而不是向/从文件写入和读取对象

c++ - 了解 C++ 编译

c++ - 这些是什么错误?即使我不在Linux上工作,我也遇到了Linux错误

c++ - 如何使用C读取NTFS文件系统的图元文件

c++ - 如何在 C++ 中公开成员对象接口(interface)

java - 扫描仪在使用 next() 或 nextFoo() 后跳过 nextLine()?