2012-03-10 20 views
0

私は物理エンジンの作成に取り組んでいます(本の助けを借りて)、本書ではエンジンが存在するための名前空間を作成することを提案しています。そうtypedefと名前空間を解決するVS2010

typedef float real; 

のような変数のための「typedefは」と私は著者が精度のニーズが変化した場合、あなたはこの1つのだけの行に移動し、それを変更し、多分持つことができる」ということで与えられるという説明を理解することができますせいぜい10のヘルパー関数と表現の明快さを変えたいと思っていますが、他の2つのものと一致すると思いますので、これが可能であることを願っています。

the b ookはtypedefとヘルパー関数をあるファイルに定義して(変更が必要な場合はファイルホッピングを最小限に抑えるため)、他のファイルがコンパイルされる前にそれをインクルードし、名前空間でこれをすべて実行するように要求します。 、別のファイルにエンジンで使用するクラスを作成します。直接の問題は、インテリセンスであり、そして

genFunction.h 
namespace Physics{ 
typedef float real; 
} 


Classes.h 
#include "genFunction.h" 
namespace Physics{ 
class Vector3{ 
public : 
    real x; // visual studio is throwing that Physics::real is not a type name 
    real y; 
    real z; 
    // VS is not offering collapsing, or any form of 
    // auto/assistance with lines. 
    // almost like it does not want me to have classes 
    // in my own namespaces 
    Vector3(){ // uncolapsable 
     x = 0; 
     y = 0; 
     z = 0; 
    } 
}; 
} 

を解決する私は、コンパイラは、私がのtypedefを行っていることを無視していることを考慮すると、何も悪いことをやって、それは問題が発生している場所のupscope、その後、事実であるのですけれどもそのVSは私が自分自身で名前空間を作っているクラスの中にある間、提案を表示していません。

編集:タイプの解決に向けて主要な解決策が見つかりました。明らかに{の代わりに私は(をメソッドの1つに置きました。そのため、名前空間全体が存在しなかったように動作しました。 VSはまだ私に助け(関数/クラス/名前空間の崩壊、​​またはctrl +スペースバーでさえも完了の提案)を私に与えないだろうが、私は自分自身でpow()、sqrt()クラス内になければリンカエラーを引き起こしますが、インライン展開するとこれがなくなります。これはリンカを解決するには悪いことですか?

+0

ヘッダーファイルのスペルを確認しましたか? '" genfunction.h "'または '" genFunction.h "'? – iammilind

+0

これは一般化であり、私のコードでは同じです。問題の修正 – gardian06

+0

その場合、コードはgccで[作業中](http://ideone.com/QBnyK)と思われます。以前のバージョンのMSVCを使用していますか? – iammilind

答えて

2

まず、コンパイラはを投げるのではなく、何でもいいです。 あなたがそうでないと言っていないので、私はあなたのコードがうまくコンパイルされると仮定しています。問題は、Intellisenseとの違いです。

C++のIntellisenseは悪名高く不安定です。時にはうまくいく、時にはそれはしません。それは月の位相に依存するかもしれません。

場合によっては、より明示的にすることで少しでも「励ます」ことができます。 ::と入力すると、グローバル名前空間のすべてのメンバーが示唆されます。 ::Physics::となり、Physics名前空間のメンバを示す必要があります。

コードの再解析を決定するまで待つ(またはVSを再起動するか再構築しますか)という問題があります。