将赋值运算符与 class 实例和向量一起使用
Using an assignment operator with class instance and vector
我在头文件中定义了一个 class 称为节点 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]
为什么你的情况需要重载赋值运算符。 std::vector
、bool
、std::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;
}
我在头文件中定义了一个 class 称为节点 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]
为什么你的情况需要重载赋值运算符。 std::vector
、bool
、std::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;
}