2016-09-01 19 views
3

誰もが.hの中に "using"ステートメントを書くことはひどいひどいことだと誰もが知っている。C++ファイルレベルでスコープを作成する

私はUIを生成するツールを使用しています(これはJuceを知っている人のために、Jucerです)。これは.hでこの種のusingステートメントが必要です。

これを避けるために、テンプレートファイルを編集して名前空間に使用しましたが、名前空間が他の場所で使用されているため保護が不十分です。

は、そこで私はこのような無名のスコープにこのusingディレクティブを囲むことを試みた:

namespace Gui 
{ 
    { 
     using namespace juce; 

     <generated code> 
    } 
} 

は、これは私には罰金見えたが、Visual Studioは、エラーが発生します。

「{」:不足している機能ヘッダー(旧形式の正式なリスト?) コンパイラは、グローバルスコープで予期しない開いたブレースを検出しました。ほとんどの場合、これは、不正な形式の関数ヘッダー、誤った配置の宣言、または迷子セミコロンが原因です。この問題を解決するには、開いている中括弧が正しく形成された関数ヘッダーに従っていることと、宣言または迷子セミコロンが先行していないことを確認します。 このエラーは、古い形式のC言語の仮引数リストによっても発生する可能性があります。この問題を解決するには、現代のスタイルを使用する引数リストをリファクタリングします。つまり、カッコで囲みます。

これを達成する別の方法を知っていますか?もう1つの名前空間でこれを囲むことを除けば、レガシーコードが大量に変更されますか?

EDIT:発電機ツールを修正しました。誰かがそれを必要とするなら、私に連絡してください。

+0

完全修飾名を生成するためにツールを変更できますか?ヘッダーに 'using namespace'ステートメントが不要になりますか? –

+0

これは次のステップです:) – Dinaiz

答えて

4

いいえ、関数の外にブロックスコープを作成することはできません。

enclose it in another namespaceにするか、コード生成プログラムを変更したり、生成されたコードにすべてを変換する後処理ステップを追加するなどして、この要件をもたらさないような方法でJuceを使用する必要があります完全修飾名。

または、それと一緒に暮らすことができます。あなたのプロジェクト全体がJuceを使用していて、ライブラリを作成していない場合は、なので、が悪いです。

+0

https://forum.juce.com/t/problem-with-juce-namespace/1631も参照してください。 –

関連する問題