2016-09-22 2 views
3

は、私は私が宣言したクラスのベクトルでは、次のエラーconst変数と非const変数を操作するoperator/overload関数の宣言方法は?

Invalid operands to binary expression ('const Vector' and 'double') 

を取得していますBRDFのreturn文に対応したラインで、次のコード

#pragma once 

#include "material.h" 
#include "../Math/vector.h" 
#include <cmath> 

class LambertianMaterial : public Material 
{ 
public: 
    LambertianMaterial(Vector rho); 
    Vector brdf(Vector wi) const 
    { 
     return mRho/M_PI; // Error here 
    } 

private: 
    Vector mRho; 
}; 

を持ってoperator/

のような
Vector operator/(const float a); 

私はこのメソッドを再定義することを考えていました。

friend Vector operator/(const Vector& v, const float& a); 

これは良い方法ですか、またはオペレータの現在の定義がconst Vectorのケースを説明する方法がありますか?

答えて

3

constメンバー関数にすることができます。この関数は、非静的メンバー変数を変更しない場合は、constオブジェクトと非constオブジェクトに適用できます。

Vector operator/(const float a) const; 

あなたが思ったように、メンバー以外の機能(必要に応じて友人として宣言されている)を作成することもできます。私はoperator/の方が好きです。詳細については、Operator overloading : member function vs. non-member function?を参照してください。

+0

あなたは完全に正しいです、私はそれを重視しました。 – BRabbit27

関連する問題