C++ c++;参数未传递到操作员过载<;

C++ c++;参数未传递到操作员过载<;,c++,object,overloading,operator-keyword,C++,Object,Overloading,Operator Keyword,为类“State”创建运算符重载时,我重载的运算符没有初始化任何成员变量 bool operator<(const State m)const { return (mDist < m.mDist); } 关于我应该检查哪些内容可能导致值无法传递给操作员的建议 编辑: 这是我的国家班 #pragma once #ifndef STATE_H_ #define STATE_H_ #include<iostream> #include

为类“State”创建运算符重载时,我重载的运算符没有初始化任何成员变量

    bool operator<(const State m)const  
    {
       return (mDist < m.mDist);
    }
关于我应该检查哪些内容可能导致值无法传递给操作员的建议

编辑:

这是我的国家班

#pragma once
#ifndef STATE_H_
#define STATE_H_
#include<iostream>
#include <vector>

using namespace std;

const int SIZE = 3;

class State
{
private:
    int board[SIZE][SIZE];
    int blankRow;
    int blankCol;
    State *parent;
    State *goal;

public:
    State() 
    {
        int counter = 0;
        for (int i = 0; i < SIZE; i++)
            for (int j = 0; j < SIZE; j++)
            {
                setValue(i, j, counter);
                counter++;
            }
        int mDist = 0;
    }

    State(const State& s) 
    {
        for (int i = 0; i < SIZE; i++)
            for (int j = 0; j < SIZE; j++)
                board[i][j] = s.getValue(i, j);
    }
    State(const State& s, int r, int c, State *g) 
    {
        for (int i = 0; i < SIZE; i++)
            for (int j = 0; j < SIZE; j++)
                board[i][j] = s.getValue(i, j);
        blankRow = r;
        blankCol = c;
        goal = g;
        findMDist(*goal);
    }

    //get
    int mDist;


    //find
    void findMDist(State Goal);


    bool operator<( State m)const   
    {
        return (mDist < m.mDist);
    }

};

#endif
#pragma一次
#ifndef州_
#定义状态_
#包括
#包括
使用名称空间std;
常数int SIZE=3;
阶级国家
{
私人:
集成电路板[尺寸][尺寸];
int blankRow;
int blankCol;
国家*父母;
国家*目标;
公众:
国家()
{
int计数器=0;
对于(int i=0;i0)
{
状态n(当前、行、列);
n、 swapLeft();
n、 findMDist(目标);
下一个移动推送(n);
}
}
关于我应该检查哪些内容的任何建议可能会导致值不正确 是否传递给操作员过载


当您将
状态
的副本传递给
运算符
布尔运算符时,运算符没有成员变量。您是否将操作员作为
州的成员实施
?请检查您的复制构造函数-您正在传递的是副本,而不是引用。更改
bool运算符您的构造函数未初始化
mDist
(而是隐藏
mDist
成员的同名局部变量)。我看不到
findMDist()
方法的实现,但也可能是您没有正确设置
mDist
,复制构造函数没有复制
mDist
,您在
操作符中传递值,这可能是一种好的做法,但它本身并不能解释未初始化的成员,除非OP未能正确实现其复制构造函数,在这种情况下,应该对此进行解释。我认为mDist应该在复制构造函数之后计算。它需要更改对象并重新计算mDist。还值得一提的是,s.mDist也没有在操作符中初始化。为什么您认为除了复制构造函数所说的操作之外,还会发生任何事情?因为什么时候复制某个东西也会导致“之后”发生其他神奇的事情?@下划线\d感谢您注意到您的权利,我可能应该首先正确地获取复制构造函数。我确实有一个n.findMDist(goal),它是在构造函数之后调用的,我希望该构造函数能够基于不同的状态对象为mDist设置值。
#pragma once
#ifndef STATE_H_
#define STATE_H_
#include<iostream>
#include <vector>

using namespace std;

const int SIZE = 3;

class State
{
private:
    int board[SIZE][SIZE];
    int blankRow;
    int blankCol;
    State *parent;
    State *goal;

public:
    State() 
    {
        int counter = 0;
        for (int i = 0; i < SIZE; i++)
            for (int j = 0; j < SIZE; j++)
            {
                setValue(i, j, counter);
                counter++;
            }
        int mDist = 0;
    }

    State(const State& s) 
    {
        for (int i = 0; i < SIZE; i++)
            for (int j = 0; j < SIZE; j++)
                board[i][j] = s.getValue(i, j);
    }
    State(const State& s, int r, int c, State *g) 
    {
        for (int i = 0; i < SIZE; i++)
            for (int j = 0; j < SIZE; j++)
                board[i][j] = s.getValue(i, j);
        blankRow = r;
        blankCol = c;
        goal = g;
        findMDist(*goal);
    }

    //get
    int mDist;


    //find
    void findMDist(State Goal);


    bool operator<( State m)const   
    {
        return (mDist < m.mDist);
    }

};

#endif
void Game::next() {

int row=0;
int col=0;
current.getBlank(row, col);


if (row > 0)
{
    State u(current, row, col);
    u.swapUp();
    n.findMDist(goal);
    nextMoves.push(u);
}
if (row < 2)
{
    State d(current, row, col);
    d.swapDown();
    n.findMDist(goal);
    nextMoves.push(d);
}
if (col < 2)
{
    State n(current, row, col);
    n.swapRight();
    n.findMDist(goal);
    nextMoves.push(n);
}
if (col > 0)
{
    State n(current, row, col);
    n.swapLeft();
    n.findMDist(goal);
    nextMoves.push(n);
}
}
bool operator<(State const &m) const   
{
    return (mDist < m.mDist);
}
bool operator<( State m)const
State(const State& s)
{
    for (int i = 0; i < SIZE; i++)
        for (int j = 0; j < SIZE; j++)
            board[i][j] = s.getValue(i, j);
}