我的代码在编译时返回错误invalid conversion from ‘char*’ to ‘char’
,并将第二行return char32
标识为问题。我已经搜索了Internet和该站点,但是没有找到任何帮助。我发现错误消失了,如果我用return *char32
替换问题行,则代码可以编译,但是我不确定为什么会出现这种情况。我知道这是指针符号,但是我不确定它们如何应用于这种情况。另外,当我这样做并尝试将*char32
打印到终端时,什么也没发生,表明*char32
为空。我还验证了确实从文件some file
中读取了一行。
更新1:我试图从parse()
返回完整的数组。
更新2:我意识到我没有说明此代码的目标。我试图从some file
读取第一行,将其传递到parse()
,并将前32个字符索引到数组char32
中,然后将其传递回main()
。对困惑感到抱歉。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
char parse(string line), char32[32];
int main()
{
string line;
ifstream vgv;
vgv.open("some file");
getline(vgv, line);
cout << char32;
return 0;
}
char parse(string line)
{
int size = line.size();
for (int count1 = 0; count1 < 32; count1 ++)
{
char32[count1] = line[count1];
}
return char32;
}
最佳答案
这里有很多问题。
如果您确实要返回单个字符,则应该
return char32[0];
或您想要的任何字符(按索引)。顺便说一下,这与* char32相同。如果不使用索引,则可以将数组变量视为指向元素中第一个数组的指针。尽管
char32
是全局变量,但实际上并没有在返回void的函数上方添加任何值-调用者可以直接访问char32
。如果要使用cout
输出结果,最好从string
返回新的parse
。达到min(size,32)时,应停止
parse
中的循环,否则将以不确定的结果(通常是错误的)超出line
中的输入字符串。最好在此处为空终止符留出空间-再次使用string可以避免这种情况。魔术数字是邪恶的。使用它代替硬编码的32:
const size_t MAX_LENGTH(32);
如果所有解析都是按字节复制,则可以使用
std::copy
,但是我怀疑这是您打算在接口问题解决后构建的真正解析器的原型。我认为在将char myresult = parse(line);
输出到char32
之前,您缺少对cout
的呼叫。