2017-12-08 11 views
0

저는 C++이 처음이에요. 연산자 오버로딩을 통해 벡터 계산을 구현하려고합니다. 내가 의도 한대로 작동하지 않는 코드는 이것입니다.array 매개 변수가있는 내 메서드가 제대로 작동하지 않는 이유는 무엇입니까? (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

MAIN.CPP에 따르면
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 

입니다 출력 (0.3, 0.5, 0.8)을 가져야합니다. 그러나, 나는 계속 (0.3, 0, 2.12199e-314), 결과 배열의 첫 번째 요소 만 옳았음을 의미합니다. 배열에서 포인터를 사용하기 때문에 포인터라고 생각합니다. 그래서 첫 번째 요소 만 정확합니다. 운영자 + 직장을 만들 수있는 방법이 있습니까? 어떤 도움을 주시면 감사하겠습니다. 감사!

+0

'double tempList [size];와 같이 컴파일 타임에 크기를 알 수없는 배열을 정의하는 것은 C++ 표준에 따라 허용되지 않습니다. 여러 컴파일러에 의해 언어 확장이 허용되지만 몇 가지 위험과 제한이 따르므로 모든 책임은 사용자에게 있습니다. – aschepler

+0

아 나는 그것을 몰랐다. 큰 충고에 감사드립니다! –

답변

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 그것을 이용한다. 생성자에서 배열의 데이터를 객체가 소유 한 다른 배열로 복사해야합니다.