2017-01-13 44 views
4

Doxygen(1.8.10)抱怨說我的字符串的沒有記錄。以下是一個演示問題Doxygen無證字符串值

#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"}; 

這將導致警告

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

如果我減少結構的單一成員,從初始化,然後警告消失後刪除「secondVal」一個小例子,但顯然這不是一個解決方案...

+0

它是否適用於通用初始化?我認爲這應該是'struct MyStruct MyClass :: instance {{「firstVal」,「secondVal」}};' –

+0

_almost_工作,並導致我工作的解決方案(假設C++ 11/GCC 4.4或更高版本,我很喜歡更便攜的解決方案)。 'struct MyStruct MyClass :: instance {{「firstVal」},{「secondVal」}};'(每個字符串都在它自己的一組花括號中)。編譯器實際上會接受@AndrewLazarus的這個玩具例子的例子,但它似乎在調用錯誤的構造函數!編譯器警告是你的朋友,因爲它觸發了第二個參數的'-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. 

BTW還包含一個提示:

不要使用多線實體///<意見。你的文檔的結果會更好看,如果你註釋你的代碼是這樣的:

/** 
* 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」明顯更糟。 (我的非玩具代碼也使用'/ ** * /'風格評論,我只是把它全部放在一行上以獲取更多可讀的示例代碼) – Alec

+0

@Alec對不起,我沒有認出「屬性」條目,我只是看着'MyStruct'的文檔看起來不錯。關於我的提示:我只是表示對你很好,因爲你發送的示例代碼在文檔中產生了一些不需要的字符。 – gmug