2016-04-27 31 views
1

當使用Visual Studio 2013編譯我的錯誤非法引用非靜態成員在一個struct

illegal reference to non-static member 'Ice::Constants::Tau 

這是所有相關的代碼

的Maths.hpp

#ifndef ICE_MATHS_DEFINES_H 
#define ICE_MATHS_DEFINES_H 

#include "Vec2.hpp" 
#include "Vec3.hpp" 
#include "Vec4.hpp" 
#include "Mat4.hpp" 
#include "Quaternion.hpp" 

namespace Ice 
{ 
    struct Constants 
    { 
    static constexpr f32 Pi = 3.14159265359; 
    static constexpr f32 Tau = 6.28318530718; 
    }; 
} 

#endif 

engine.cpp中違規代碼行

_context_scene.projection = perspective(Constants::Tau, aspect_ratio, 0.1f, 100.0f); 

透視功能

Mat4 perspective(f32 fov, f32 aspect, f32 near, f32 far); 
+1

顯示'perspective'的定義。例如,如果它通過參考來考慮價值,那麼知道這一點很重要。 –

+0

我不會使用以下劃線開頭的名字(它們在全局命名空間中是不允許的) – user463035818

+0

'perspective'是一個函數還是一個類的成員? –

回答

0

我無法重現錯誤的GCC 6.如果我做perspective採取const &爲頭的說法,那麼我可以得到這個錯誤:

constexpr-test.cpp:(.text+0x1b): undefined reference to `Constants::Tau' 

否則它工作正常, 爲了我。

我唯一的猜測是你的Maths.hpp文件中有未保存的更改。或者你有第二個副本。在Tau的定義中,您沒有static

+0

我的朋友使用GCC能夠編譯它。但我甚至無法使用完全相同的設置,也沒有任何編譯器細節。 – GabeNoodle

+0

@GabeNoodle:那麼聽起來你所用的編譯器和版本將是包含在你的問題中的重要信息。 –

+0

我正在使用Visual Studio 2013。 – GabeNoodle