gpt4 book ai didi

c++ - 在 C++ 中使用 string::erase 时出错

转载 作者:行者123 更新时间:2023-11-28 05:51:44 25 4
gpt4 key购买 nike

我在编译 C++ 程序时遇到错误。下面是我的代码!

#include <pthread.h>
#include "Path.h"
#include "Maze.h"
#include "SubmitMazeSoln.h"
#include "Assignm3_Utils.h"
#include "Assignm3.h"

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

srand(time(NULL));
string random = "0123";

for (int i = 0; i < 4; i++)
{
int x = (rand () % random.size());
char y = random[x];

random.erase(remove(random.begin(), random.end() + y), random.end());

int temp;
if (threadData.threadIDArrayIndex == 0)
{
temp = i;
}

else
{
temp = y - '0';
}
}

编译程序时的错误

myprog.cpp: In function ‘void* exploreMaze(void*)’:
myprog.cpp:108:56: error: cannot convert ‘std::basic_string<char>::iterator {aka __gnu_cxx::__normal_iterator<char*, std::basic_string<char> >}’ to ‘const char*’ for argument ‘1’ to ‘int remove(const char*)’
random.erase(remove(random.begin(), random.end() + y), random.end());

非常感谢大家的帮助!谢谢!

最佳答案

正如 DaveB 所说,

remove(random.begin(), random.end() + y)

应该是

remove(random.begin(), random.end(), y)

错误消息令人困惑,因为 random.end() + y 是一个有效的表达式,尽管它会生成一个远离容器末尾的迭代器。因此,编译器看到对函数 remove 的调用带有两个参数,并试图理解它。编译器看到一个带有签名 remove(const char*) 的函数,并猜测这就是你的意思,然后提示它无法将第一个参数转换为类型 const char*.

如果您使用适当的 C++ 标准库名称(例如 std::remove),就不会发生这种混淆。 using namespace std; 再次出击!

关于c++ - 在 C++ 中使用 string::erase 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35116176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com