【问题标题】:Why is my method with array parameter not working properly? (C++)为什么我的带有数组参数的方法不能正常工作? (C++)
【发布时间】:2017-12-08 03:38:59
【问题描述】:

我是 C++ 新手,我一直想通过运算符重载来实现向量计算。 没有按我的预期运行的代码是这样的。

首先,main.cpp

#include <iostream>
#include "MyVector.h"
#include "MyVector.cpp"

int main() {
double forvector1[] = {0.1,0.2,0.3};
double forvector2[] = {0.2,0.3,0.5};
MyVector vector1(forvector1,3);
MyVector vector2(forvector2,3);
MyVector temp = vector1 + vector2;
temp.print();
return 0;
}

然后,MyVector.cpp

#include "MyVector.h"
#include <iostream>
using namespace std;

MyVector::MyVector(double numList[], int size) : numList(numList), size(size) {
}

MyVector::MyVector(){   //empty vector;
}

void MyVector::print(){
cout<<"("<<numList[0];
for(int i=1;i<size;i++){
    cout<<", "<<numList[i];
}
cout<<")"<<endl;
}

MyVector MyVector:: operator+(MyVector vec){
if(vec.size != size){
    cout<<"+ cannot be applied to ";
    cout<<"("<<numList[0];
    for(int i=1;i<size;i++){
        cout<<", "<<numList[i];
    }
    cout<<") and ";
    vec.print();
    return MyVector();
}
double tempList[size];
for(int i=0;i<size;i++)
{
    tempList[i]=numList[i]+vec.numList[i];
}
MyVector result(tempList,size);
return result;
}

最后,这是我的 MyVector.h

class MyVector{
private:
int size;
double * numList;

public:
MyVector(double numList[], int size);  //size>=1
MyVector();  //empty Vector
void print();  //print its content e.g.  (1, 2, 3, 4)
MyVector operator-(MyVector vec);
MyVector operator+(MyVector vec);
double operator*(MyVector vec);
MyVector operator/(MyVector vec);

//You may add more member functions as well
};

#endif // MYVECTOR_H_INCLUDED

根据 main.cpp,我应该得到 (0.3, 0.5, 0.8) 的输出。但是,我不断得到 (0.3, 0, 2.12199e-314),这意味着可能只有结果数组的第一个元素是正确的。我猜这是因为我曾经指向数组的指针,所以这就是为什么只有第一个元素是正确的。有什么办法可以让 operator+ 工作吗?任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 请注意,根据 C++ 标准,不允许定义一个大小在编译时未知的数组,例如您的 double tempList[size];。许多编译器允许它作为语言扩展,但存在一些风险和限制,因此使用它需要您自担风险。
  • 啊,我不知道。谢谢你的好建议!

标签: c++ pointers operator-overloading


【解决方案1】:

我的猜测是有一个悬空指针。

double tempList[size];
for(int i=0;i<size;i++)
{
    tempList[i]=numList[i]+vec.numList[i];
}
MyVector result(tempList,size);
return result;

tempList 指向函数本地的数据,但result 使用它。在您的构造函数中,您应该将数组中的数据复制到该对象拥有的另一个数组中。

【讨论】:

    猜你喜欢
    • 2013-05-21
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 2020-03-18
    • 2014-08-27
    • 2020-03-28
    相关资源
    最近更新 更多