2013-10-21 3 views
-2

나는 n 개의 입자로 구성된 시스템을 가지고 있습니다. Particle 객체는 여러 매개 변수 (double이라고 함)를 인수로 취하는 생성자를 사용하여 초기화 할 수 있습니다.객체 생성을위한 인수를 사용하는 생성자를 사용하여 객체 배열 초기화

Particle p(para1, para2 ... , paraN); 

이제는 n- 입자 배열이 필요한 시스템을 갖게되었습니다. Particle 매개 변수와 함께 객체 수를 가져 와서 n-Particle 배열을 만드는 생성자를 작성하려고합니다.

class System { 

public: 
    Particle p[]; //declare dynamic array 

    System() {} 
    //Constructor 
    System(int n, para1, para2 ... , paraN) 
    { 
     Particle p[n]; //Particle array of size n 
     for(int i=0; i<n; i++) 
     { 
       Particle temp(para1, para2 ... , paraN); 
       p[i] = temp; 
      } 
     } 
}; 

프로그램을 컴파일하고 다음과 같은 오류를 제공하지 않습니다 :

error: no match for ‘operator=’ in ‘p[i] = tempp’ 
note: candidate is: 
note: Particle& Particle::operator=(const Particle&) 
note: no known conversion for argument 1 from ‘Particle(double, double, double,  double)’ to ‘const Particle&’ 

내가 C에 새로운 오전 ++ 및 일반적으로 OOP

나는 다음 시도했다. 이것을 극복하는 방법에 대한 도움은 크게 감사하겠습니다. 당신이 p[i] = temp 사용하는 경우

+1

생성자 내의 배열 p는 같은 이름의 속성 p를 음영 처리합니다. 대신에'p = new Particle [n]'과 같은 것을 사용하십시오. – Sjlver

+0

특히, 크기 n의 입자 배열은 P [n]이 같은 것을 의미 함을 의미하지 않습니다 – doctorlove

+0

이것은 정확한 코드와 오류입니다 : 오류는 'p [i]의'operator = = tempp '이고 코드는 p [i] = temp라고 말합니다; – doctorlove

답변

0

, 컴파일러는 서명 입자 클래스의 대입 연산자의 오버로드를 찾습니다

Particle& Particle::operator=(const Particle&) 
이것의 목적은 사용자가 정의하는 것입니다

방법 객체 작품의 할당 그 수업에 따라. 여기서는 속성 할당 또는 정의한 파티클 할당의 의미를 수행 할 수 있습니다. 포인터의 복사가 올바른 동작이 아닐 수있는 객체에서 동적으로 데이터를 할당 한 경우 특히 유용합니다.

이 페이지를 살펴보십시오 : http://www.cplusplus.com/articles/y8hv0pDG/ 할당 연산자와 복사 생성자가 필요한 이유를 설명 할뿐만 아니라 복사 생성자도 필요합니다.

+0

왜 '입자 (double, double, double, double)'에서 'const 입자'로의 변환을 알 수없는 오류가 발생합니까? – doctorlove