2012-08-28 39 views
5

Tôi đang sử dụng Doxygen để ghi lại một số mã của mình. Tôi đã có một hàm có sử dụng một đối số mặc định, được quy định trong ví dụ tiêu đề:Doxygen lặp lại các hàm C++ với các đối số mặc định

unsigned int CountColumns(const std::string&,const std::string& delim=""); 

và thực hiện tương ứng trong file nguồn như:

unsigned int CountColumns(const string& input,const string& delim) 
{ 
    ... 
} 

Khi tôi sử dụng Doxygen để tạo tài liệu của tôi, CountColumn có hai mục - một bao gồm giá trị mặc định và một không có:

unsigned int CountColumns (const string &input, const string &delim) 
unsigned int CountColumns (const std::string &, const std::string &delim="") 

Làm cách nào để tránh điều này? Tôi không muốn nhiều định nghĩa chức năng làm lộn xộn tài liệu của mình. EDIT: Như tôi cũng đã đề cập trong câu trả lời của tôi dưới đây, vấn đề xuất hiện là do thực tế là các tập tin tiêu đề sử dụng 'std :: string' trong các đối số, trong khi các tập tin nguồn bao gồm một 'bằng cách sử dụng std :: string 'statement và sau đó sử dụng' string 'trong các đối số. Nếu tôi thay đổi định nghĩa hàm để sử dụng 'std :: string' trong tệp nguồn, Doxygen nhận ra nó là hàm giống như được khai báo trong tiêu đề.

+0

Bạn có đang chạy doxygen để ghi lại việc triển khai không? –

+0

Tôi yêu cầu nó bao gồm các tệp nguồn để tôi nhận được các liên kết trực tiếp từ tài liệu của tôi tới mã nguồn dưới dạng html, cũng như tài liệu có chức năng tham chiếu đến những tài liệu khác. Đó có phải là ý bạn không? (Xin lỗi, tôi vẫn đang học các tùy chọn doxygen). Tuy nhiên, tôi đã đặt tùy chọn "INLINE_SOURCES" thành NO. – Wheels2050

Trả lời

4

Tôi đề nghị đặt BUILTIN_STL_SUPPORT thành YES trong tệp cấu hình của bạn, doxygen biết chuỗi là một lớp được xác định trong tiêu chuẩn không gian tên.

+0

Tuyệt vời, cảm ơn vì điều đó - tôi đã bỏ lỡ khi thấy tùy chọn đó trong Doxyfile. Hoạt động hoàn hảo! – Wheels2050

0

Làm thế nào để loại trừ các chức năng bổ sung khỏi tài liệu?

này là từ Doxygen FAQ,

"Làm thế nào tôi có thể làm cho doxygen bỏ qua một số đoạn mã?

Cách mới và đơn giản nhất là thêm một khối bình luận với một lệnh \cond lúc bắt đầu và một . bình luận khối với một lệnh \endcond ở phần cuối của các đoạn mã mà nên bỏ qua này sẽ có trong cùng một tập tin tất nhiên

Nhưng bạn cũng có thể sử dụng tiền xử lý Doxygen của cho việc này:. Nếu bạn đặt

#ifndef DOXYGEN_SHOULD_SKIP_THIS 

    /* code that must be skipped by Doxygen */ 

#endif /* DOXYGEN_SHOULD_SKIP_THIS */ 
around the blocks that should be hidden and put: 

    PREDEFINED = DOXYGEN_SHOULD_SKIP_THIS 
in the config file then all blocks should be skipped by Doxygen as long as 

PREPROCESSING = YES. "

+0

Tôi đã nghĩ rằng sẽ có một cách sạch hơn, thanh lịch hơn để làm điều đó mặc dù - Tôi không muốn phải nghỉ mát để tự bỏ qua đoạn mã nếu nó có thể được giúp đỡ. – Wheels2050

+0

có 2 cách hiển thị ở đó, bộ tiền xử lý hoặc sử dụng lệnh \ cond và \ endcond, tôi nghĩ bạn đang tìm kiếm số 2 – MimiEAM

2

Vấn đề có vẻ là do tệp tiêu đề sử dụng 'std :: string' trong đối số, trong khi tệp nguồn bao gồm câu lệnh 'using std :: string' và sau đó sử dụng 'string Nếu tôi thay đổi định nghĩa hàm để sử dụng 'std :: string' trong tệp nguồn cũng vậy, Doxygen nhận ra nó giống như hàm đã khai báo trong tiêu đề.

Mặc dù không lý tưởng, nó là một giải pháp hoạt động và không quá khó sử dụng

Các vấn đề liên quan