运算符重载为友元函数错误
Operator overloading as friend function error
我正在尝试使用 + 添加 2 个向量(数学向量)。这是我的代码:
class Vector{
double v[Max_size];
int dim;
public:
int getDim() const;
Vector();
Vector(int n);
Vector(const Vector& a);
Vector add(const Vector&b);
friend Vector operator+(Vector summand1, Vector summand2);
};
运算符重载:
Vector operator+(Vector summand1, Vector summand2){
int dim1 = summand1.getDim();
int dim2 = summand2.getDim();
assert(dim1 == dim2);
Vector sum(dim1);
int i;
for(i = 0; i < dim1; i++){
sum.v[i] = summand1.v[i] + summand2.v[i];
}
return sum;
}
以及我如何使用它:
Vector m = v+t;
当我运行代码时,它总是显示 m 是 (0,0) (2D 向量),这是构造函数生成的默认值。怎么了?谢谢!
你的复制构造函数:
Vector::Vector(const Vector& a){
dim = a.dim;
Vector(dim);
}
正确设置dim
成员的值,但没有其他副作用。
您应该具有以下代码的变体:
Vector::Vector(const Vector& a) : dim(a.dim) {
std::copy(std::begin(a.v), std::end(a.v), v);
}
这实际上将复制参数中存在的数据,您将看到代码的正确行为:
// Copy constructor called here, but did not correctly copy the data before.
Vector m = v + t;
为了更好的(我打算更简单,更安全)Vector类,如果您可以访问至少符合C++11的编译器,则可以编写:
class Vector{
std::array<double, Max_size> v; // Note the std::array here.
int dim;
public:
int getDim() const;
Vector();
Vector(int n);
Vector(const Vector& a);
Vector add(const Vector&b);
friend Vector operator+(Vector summand1, Vector summand2);
};
std::array
将处理所有事情,前提是您像这样编写复制构造函数:
Vector::Vector(const Vector& a) : v(a.v), dim(a.dim) {
}
或者,更好的是,您可以让编译器生成具有相同行为的复制构造函数本身。
相关文章:
- "error: no matching function for call to"构造函数错误
- 为什么类中的ostringstream类型的成员会导致";调用隐含删除复制构造函数";错误
- 尝试将unique_ptrs推送到向量时使用纯虚拟函数错误
- C++ OpenCV 卡尔曼滤波器构造函数错误
- C++:用户定义的显式类型转换函数错误
- C++ 合并字符串以'system'函数错误
- C++ wmain 函数错误时使用 Unicode
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- C++ 中常量属性的初始化构造函数错误
- 线程 std::调用未知类型,无法专门化函数错误
- 表单显示对话框函数错误,并且不执行下面的语句
- 函数错误 C2059:语法错误:'>'不起作用
- STL向量上出现奇怪的复制构造函数错误
- C++ Visual Studio 重载函数错误:没有重载函数的实例与指定的类型匹配
- C++引用已删除函数错误
- 为什么通过带有文字编号的引用调用会出现"无匹配函数"错误?
- C++ 乘法定义的构造函数错误消息似乎错误
- 在 c++ 代码中将数组传递给函数错误
- FFMPEG avcodec_decode_video2函数错误代码
- 为什么我会收到转换函数错误