2010-08-15 5 views
0

I는 I이 함수를 처리하고있어 일부 레거시 코드 (C에서 ++)에서 발견이 함수가 컴파일러에서 포착되지 않는 이유는 무엇입니까?

Vec3d Minimum() 
{ 
    if(this->valid) 
    { 
     return minBB; 
    } 
    else 
    { 
     return NULL; 
    } 
} 
Vec3d 기본적 과부하 X, Y, Z 및 일부 연산자 구조체 인 객체이다

(코드 이하) .

AFAIK, 사용자 정의 개체에 대해 0을 반환 할 수 없습니까 ... 아니면 내가 모르는 0으로 자동 캐스트가 있습니까? 이것은 단지 호기심입니다 : P

감사

class Vec3d 
{ 
public: 
    double x,y,z; 

    /// \brief Default constructor initializes x and y to 0 
    Vec3d(); 

    /** \brief Constructor initializies vector to input parameters x and y and z 
    * 
    * \param x Double value that initializes x value of vector 
    * \param y Double value that initializes y value of vector 
    * \param z Double value that initializes z value of vector 
    */ 
    Vec3d(double x, double y, double z); 

    /** \brief Copy constructor 
    * 
    * \param v Pointer to another vec3i with which to initialize current vec3i 
    */ 
    Vec3d(Vec3d* v); 

    /**\brief Sets a vector (already instantiated) to the input parameters (x,y,z) 
    * 
    * \param x Double value that initializes x value of vector 
    * \param y Double value that initializes y value of vector 
    * \param z Double value that initializes z value of vector 
    * 
    * This method is just so you can change the value of an already instantiated vector 
    */ 
    void set(double xi, double yi, double zi); 

    const Vec3d operator -(const Vec3d &other) const; 
    const Vec3d operator +(const Vec3d &other) const; 
    const Vec3d operator *(const double num) const; 
    const double operator *(const Vec3d &other) const; 
    const Vec3d operator /(const double num) const; 
    double magnitude(); 
}; 

답변

5

0 널 포인터 상수로 포인터의 맥락에서 사용될 수있다. 즉, 여기에 무슨 : 주석이 잘못

Vec3d(Vec3d* v); 

주, 즉 하지 사본 - 생성자 때문이다.

코드가 약간 엉성합니다. set 함수가 필요하지 않으며 일반적으로 돌연변이가없는 연산자는 자유 함수 여야합니다. 그리고 가장 중요한 것은 생성자를 가지고 있으면 낭비되고 혼란 스럽습니다. 벡터에 대한 포인터가 있으면 다음을 수행해야합니다.

Vec3d v = *other; 

포인터에서 암시 적 변환을 제공하지 않습니다.

+0

오, 나는 생성자 하하의 그 부분을 보지 못했습니다. 그것을 지적 해 주셔서 고마워, 나는 지금 바보라고 느낀다 : P 내가 할 수있을 때 대답을 받아 들일 것이다. 3 분을 기다려야한다. 코드가 끔찍합니다. 당신은 그것의 절반을 보지 못했어요 ... 나는 이것들 중 일부를 일상적으로 게시 할 것입니다,하지만 저는 교수님이 저를 잡으려고하거나 하하라고 생각합니다. – Xzhsh

+1

묻지 않기 위해 어리 석을 느끼지 않으며, 묻지 않는 한 더 바보입니다. –

관련 문제