C++ 如何重载访问类属性的结构运算符?
我想在结构中重载+运算符以实现连接运算符。为此,我需要访问插入结构的一些类成员(C++ 如何重载访问类属性的结构运算符?,c++,C++,我想在结构中重载+运算符以实现连接运算符。为此,我需要访问插入结构的一些类成员(matrix和route),如下面的代码所示 MLP.h class MLP{ private: std::vector<int> route; std::vector<std::vector<tCost>> cost; double **matrix; ... } typedef struct s
matrix
和route
),如下面的代码所示
MLP.h
class MLP{
private:
std::vector<int> route;
std::vector<std::vector<tCost>> cost;
double **matrix;
...
}
typedef struct subsequenceCost{
int w;
double t;
double c;
int first,
last;
subsequenceCost operator+(const subsequenceCost& other) const{
return subsequenceCost{
w + other.w,
t + matrix[route[last]][route[other.first]] + other.t,
c + other.w*(t + matrix[route[last]][route[other.first]]) + other.c,
first,
other.last,
};
}
}tCost;
我已经尝试
extern
我将使用的MLP对象,并将subsequenceCost
结构声明为friend
,这样我就可以访问它的私有成员,但是没有用,因为MLP是tCost
的组成部分。有什么想法吗?fwiw反对使用运算符+
进行串联的常见论点是+
应该是可交换的,而串联不是。我不明白MLP
和子序列成本之间的关系是什么。谁的操作员需要访问哪个成员?请不要在C++中使用<代码> TyPufFrase。C是必需的,C++中是冗余的。只需编写struct subsequenceCost{…}代码>或结构tCost{…}
并一致使用一个名称。矩阵
是MLP
的非静态成员。您希望引用哪个实例的矩阵
?subsequenceCost
实例不包含对MLP
实例的任何引用。@Evg none。当操作符的行为显而易见并且没有意外时,如果这两个条件都不成立,那么使用有意义的名称的方法更好