2017-01-13 9 views
4

Doxygen(1.8.10)は、の文字列が文書化されていないと訴えています。ここではこれは私が単一のメンバーに構造体を削減し、イニシャライザから「secondVal」を削除した場合は、警告が消え、警告Doxygen文書化されていない文字列の値

/tmp/example.cpp:10: warning: Member firstVal (variable) of class MyClass is not documented. 

につながる問題

#include <string> 

struct MyStruct ///< Docs for struct 
{ 
    std::string a; ///< Docs for a 
    std::string b; ///< Docs for b 
}; 

class MyClass ///< Docs for class 
{ 
    static struct MyStruct instance; ///< Docs for instance 
}; 

struct MyStruct MyClass::instance = {"firstVal", "secondVal"}; 

を実証し、最小限の例です。しかし明らかにそれは解決策ではありません...

+0

普遍的な初期化では機能しますか?私はそれが 'struct MyStruct MyClass :: instance {{" firstVal "、" secondVal "}};' –

+0

であると思っています。それが働きました。(C++ 11/GCC 4.4以上、私はよりポータブルなソリューションが大好きです)。 'struct MyStruct MyClass :: instance {{" firstVal "}、{" secondVal "}};'(各文字列リテラルはそれ自身の中括弧のセットです)。コンパイラはこのToyの例で@AndrewLazarusの例を実際に受け付けますが、間違ったコンストラクタを呼び出すようです!コンパイラの警告は、2番目のargの '-Wmissing-field-initializers'(' -Wextra'の一部)をトリガーして以来、ここにあなたの友人です... – Alec

答えて

3

structを削除するだけです。以下のように:

#include <string> 

struct MyStruct ///< Docs for struct 
{ 
    std::string a; ///< Docs for a 
    std::string b; ///< Docs for b 
}; 

class MyClass ///< Docs for class 
{ 
    static struct MyStruct instance; ///< Docs for instance 
}; 

MyStruct MyClass::instance = {"firstVal", "secondVal"}; 

C++はstruct MyStructを使用する必要はありません、代わりにあなただけのプレーンなMyStructを使用することができます。この小さな変更を加えると、警告がdoxygen 1.8.13で消えます。

+0

さて、あなたは行って、私自身がこれを試してはいけないと馬鹿に感じさせました:) – Alec

-1

doxyfileのEXTRACT_ALLタグをYESに設定しようとすると、警告が消えるはずです。

はまたEXTRACT_ALL設定にコメントを注意してください。

# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in 
# documentation are documented, even if no documentation was available. Private 
# class members and static file members will be hidden unless the 
# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. 
# Note: This will also disable the warnings about undocumented members that are 
# normally produced when WARNINGS is set to YES. 
# The default value is: NO. 

ところで一つのさらなるヒント:

複数行のエンティティの///<コメントは使用しないでください。あなたのコードをコメントする場合は、あなたのドキュメントの結果はこのように良くなります。

/** 
* Docs for struct 
*/ 
struct MyStruct 
{ 
    std::string a; ///< Docs for a 
    std::string b; ///< Docs for b 
}; 

/** 
* Docs for class 
*/ 
class MyClass 
{ 
    static struct MyStruct instance; ///< Docs for instance 
}; 

そうでない場合、あなたは///<コメントを使用したい場合、あなたは宣言のセミコロンの後にコメントを入れてあります。

struct MyStruct 
{ 
    std::string a; ///< Docs for a 
    std::string b; ///< Docs for b 
}; ///< Docs for struct 

class MyClass 
{ 
    static struct MyStruct instance; ///< Docs for instance 
}; ///< Docs for class 
+0

_techically_これは警告を消してしまいますが、代わりに実際に生成されたドキュメントの 'firstVal'では、明らかに悪化しています。 (また私の非おもちゃのコードはどこでも '/ ** * /'スタイルのコメントを使用していますが、読みやすいサンプルコードのために1行にすべて詰め込んでいます) – Alec

+0

@Alec申し訳ありませんが、私は "属性"見た目の良いMyStructのドキュメントを調べただけです。そして、私のヒントに関して:あなたが送ったサンプルコードは、ドキュメント内にいくつかの望ましくない文字を生成しているので、私はあなたとうまくやっていました。 – gmug

関連する問題