2010-08-15 104 views
0

我在我處理這個功能一些傳統代碼(在C++)發現爲什麼編譯器不能捕獲這個函數,它有什麼作用?

Vec3d Minimum() 
{ 
    if(this->valid) 
    { 
     return minBB; 
    } 
    else 
    { 
     return NULL; 
    } 
} 

其中Vec3d是一個對象,它是基本上具有x,y,z和一些運營商一個結構重載(代碼如下) 。

AFAIK,你不能爲一個用戶定義的對象返回一個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分鐘。 而且代碼很糟糕。你沒有看到它的一半......我完全在dailywtf上發佈了一些,但我覺得教授會抓住我或什麼哈哈。 – Xzhsh 2010-08-16 00:07:25

+1

從不覺得愚蠢,更愚蠢的是,如果一個人不問 – 2010-08-16 00:35:12