gpt4 book ai didi

c++ - 如何修复 vs2013 上的 C3848 错误?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:14:00 25 4
gpt4 key购买 nike

我正在尝试在 VS2013 上使用 C++ 实现最佳优先搜索。下面是代码。

    //node for tree
struct Node
{
Node(std::string const& s, std::string const& p)
: state(s), path(p)
{}

const std::string state;
const std::string path;
};

//heuristic functor
struct ManhattanDistance
{
std::size_t operator()(std::string const& state, std::string const& goal)
{
std::size_t ret = 0;
for (int index = 0; index != goal.size(); ++index)
{
if ('0' == state[index])
continue;

auto digit = state[index] - '0';
ret += abs(index / 3 - digit / 3) + abs(index % 3 - digit % 3);// distance(row) plus distance(col)
}

return ret;
}
};

//functor to compare nodes using the heuristic function.
template<typename HeuristicFunc>
struct GreaterThan
{
explicit GreaterThan(HeuristicFunc h, std::string const& g = "012345678")
: goal(g), heuristic(h)
{}

bool operator()(Node const& lhs, Node const& rhs) const
{
return heuristic(lhs.state, goal) > heuristic(rhs.state, goal);
return true;
}

const std::string goal;
const HeuristicFunc heuristic;
};

在单元测试中测试此代码时,编译器提示:

Error 1 error C3848: expression having type 'const ai::search::ManhattanDistance' would lose some const-volatile qualifiers in order to call 'size_t ManhattanDistance::operator ()(const std::string &,const std::string &)'

如何理解这个错误?如何解决?

最佳答案

您的方法 std::size_t ManhattanDistance::operator()(std::string const& state, std::string const& goal) 尚未声明为 const您尝试在 const ManhattanDistance 对象上调用它。编译器正确地拒绝了这个格式错误的程序。

更改定义行以声明方法const:

std::size_t operator()(std::string const& state, std::string const& goal) const
// ^^^^^

关于c++ - 如何修复 vs2013 上的 C3848 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29058254/

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