使用带有类实例和向量的赋值运算符

时间:2015-01-19 13:18:38

标签: c++ operator-overloading

我有一个名为node的类,在头文件ClassDefinition.h

中定义
#ifndef CLASS_DEFINITION_H // if-not-defined
#define CLASS_DEFINITION_H // define
#endif                     // end-if


#include<vector>

class node{
public:

std::string name;
std::vector<std::string> child_node_vector;
std::vector<int> child_distance_vector;
bool is_visited;



node& operator=(const node &rhs)
{
    child_distance_vector = rhs.child_distance_vector;
    child_node_vector = rhs.child_node_vector;
    is_visited = rhs.is_visited;
    name = rhs.name;
    return *this;
}

};

在另一个源代码文件中,我定义了一些节点,并使用一个向量来保存这些节点Map_Info_Reader.cpp

#include <ClassDefinition.h>
node Eforie;
node Vaslui;
node Iasi;
node Neamt;
std::vector<node> node_list;
node_list[0] = Eforie;
node_list[1] = Vaslui;
node_list[2] = Iasi;
node_list[3] = Neamt;
(other class variables are set further down in file)

这两个都是从我的主源代码文件DFS_Agent.cpp

中调用的
#include <Class_Definition.h>
#include <Map_Info_Reader.h>

void Move_To_Node(node){

node current_node = Vaslui;
std::vector<std::string> Search_Queue;
Search_Queue.resize(1);
Search_Queue[0] = "Vaslui"

for (int i = 0; i<node_list.size(); i++)
{
    if (Search_Queue[0] == node_list[i].name)
    {
        current_node = node_list[i];

    }
}

} 我得到一个编译器错误:没有运算符“=”匹配这些操作数。操作数类型是node = node from line     current_node = node_list [i]

1 个答案:

答案 0 :(得分:1)

为什么在你的情况下你需要重载赋值运算符。对于std::vectorboolstd::string,您可以省略它。

无论如何,如果您决定使用自己的类似

node& operator=(const node &rhs)
{
    if (this != &rhs) // protect against invalid self-assignment
    {
        this->child_distance_vector = rhs.child_distance_vector;
        this->child_node_vector = rhs.child_node_vector;
        this->is_visited = rhs.is_visited;
        this->name = rhs.name;
    }
    return *this;
}