2011-01-29 13 views
12

Tôi đang sử dụng Doxygen cho dự án C++. Khi tôi tạo tài liệu html, tôi nhận được lỗi sau:Cảnh báo Doxygen: không tìm thấy thành viên lớp duy nhất phù hợp cho

C:/Amir/Programming/Eclipse C++/CacheOptimization/src/CacheLruNaiveAlgorithm.cpp:19:

warning: no uniquely matching class member found for

void CacheOpt::CacheLruNaiveAlgorithm::init(TierList &tierList, TierMap *tierMap)

Điều gì có thể là nguồn cho cảnh báo này? Điều gì thường gây ra nó?

Edit:

My Doxyfile

DOXYFILE_ENCODING  = UTF-8 
PROJECT_NAME   = "Cache Optimization" 
PROJECT_NUMBER   = 1.0 
PROJECT_BRIEF   = "Technion & LSI - Industrial Project" 
PROJECT_LOGO   = 
OUTPUT_DIRECTORY  = "C:/Amir/Programming/Eclipse C++/CacheOptimization/doc/" 
CREATE_SUBDIRS   = NO 
OUTPUT_LANGUAGE  = English 
BRIEF_MEMBER_DESC  = YES 
REPEAT_BRIEF   = YES 
ABBREVIATE_BRIEF  = "The $name class" \ 
         "The $name widget" \ 
         "The $name file" \ 
         is \ 
         provides \ 
         specifies \ 
         contains \ 
         represents \ 
         a \ 
         an \ 
         the 
ALWAYS_DETAILED_SEC = NO 
INLINE_INHERITED_MEMB = NO 
FULL_PATH_NAMES  = YES 
STRIP_FROM_PATH  = 
STRIP_FROM_INC_PATH = 
SHORT_NAMES   = NO 
JAVADOC_AUTOBRIEF  = NO 
QT_AUTOBRIEF   = NO 
MULTILINE_CPP_IS_BRIEF = NO 
INHERIT_DOCS   = YES 
SEPARATE_MEMBER_PAGES = NO 
TAB_SIZE    = 8 
ALIASES    = 
OPTIMIZE_OUTPUT_FOR_C = NO 
OPTIMIZE_OUTPUT_JAVA = NO 
OPTIMIZE_FOR_FORTRAN = NO 
OPTIMIZE_OUTPUT_VHDL = NO 
EXTENSION_MAPPING  = 
BUILTIN_STL_SUPPORT = NO 
CPP_CLI_SUPPORT  = YES 
SIP_SUPPORT   = NO 
IDL_PROPERTY_SUPPORT = YES 
DISTRIBUTE_GROUP_DOC = NO 
SUBGROUPING   = YES 
TYPEDEF_HIDES_STRUCT = NO 
SYMBOL_CACHE_SIZE  = 0 
EXTRACT_ALL   = YES 
EXTRACT_PRIVATE  = NO 
EXTRACT_STATIC   = NO 
EXTRACT_LOCAL_CLASSES = YES 
EXTRACT_LOCAL_METHODS = NO 
EXTRACT_ANON_NSPACES = NO 
HIDE_UNDOC_MEMBERS  = NO 
HIDE_UNDOC_CLASSES  = NO 
HIDE_FRIEND_COMPOUNDS = NO 
HIDE_IN_BODY_DOCS  = NO 
INTERNAL_DOCS   = NO 
CASE_SENSE_NAMES  = NO 
HIDE_SCOPE_NAMES  = NO 
SHOW_INCLUDE_FILES  = YES 
FORCE_LOCAL_INCLUDES = NO 
INLINE_INFO   = YES 
SORT_MEMBER_DOCS  = YES 
SORT_BRIEF_DOCS  = NO 
SORT_MEMBERS_CTORS_1ST = NO 
SORT_GROUP_NAMES  = NO 
SORT_BY_SCOPE_NAME  = NO 
STRICT_PROTO_MATCHING = NO 
GENERATE_TODOLIST  = YES 
GENERATE_TESTLIST  = YES 
GENERATE_BUGLIST  = YES 
GENERATE_DEPRECATEDLIST= YES 
ENABLED_SECTIONS  = 
MAX_INITIALIZER_LINES = 30 
SHOW_USED_FILES  = YES 
SHOW_DIRECTORIES  = NO 
SHOW_FILES    = YES 
SHOW_NAMESPACES  = YES 
FILE_VERSION_FILTER = 
LAYOUT_FILE   = 
QUIET     = NO 
WARNINGS    = YES 
WARN_IF_UNDOCUMENTED = YES 
WARN_IF_DOC_ERROR  = YES 
WARN_NO_PARAMDOC  = NO 
WARN_FORMAT   = "$file:$line: $text" 
WARN_LOGFILE   = 
INPUT     = "C:/Amir/Programming/Eclipse C++/CacheOptimization/" 
INPUT_ENCODING   = UTF-8 
FILE_PATTERNS   = *.c \ 
         *.cc \ 
         *.cxx \ 
         *.cpp \ 
         *.c++ \ 
         *.d \ 
         *.java \ 
         *.ii \ 
         *.ixx \ 
         *.ipp \ 
         *.i++ \ 
         *.inl \ 
         *.h \ 
         *.hh \ 
         *.hxx \ 
         *.hpp \ 
         *.h++ \ 
         *.idl \ 
         *.odl \ 
         *.cs \ 
         *.php \ 
         *.php3 \ 
         *.inc \ 
         *.m \ 
         *.mm \ 
         *.dox \ 
         *.py \ 
         *.f90 \ 
         *.f \ 
         *.for \ 
         *.vhd \ 
         *.vhdl 
RECURSIVE    = YES 
EXCLUDE    = 
EXCLUDE_SYMLINKS  = NO 
EXCLUDE_PATTERNS  = 
EXCLUDE_SYMBOLS  = 
EXAMPLE_PATH   = 
EXAMPLE_PATTERNS  = * 
EXAMPLE_RECURSIVE  = NO 
IMAGE_PATH    = 
INPUT_FILTER   = 
FILTER_PATTERNS  = 
FILTER_SOURCE_FILES = NO 
FILTER_SOURCE_PATTERNS = 
SOURCE_BROWSER   = NO 
INLINE_SOURCES   = NO 
STRIP_CODE_COMMENTS = YES 
REFERENCED_BY_RELATION = NO 
REFERENCES_RELATION = NO 
REFERENCES_LINK_SOURCE = YES 
USE_HTAGS    = NO 
VERBATIM_HEADERS  = YES 
ALPHABETICAL_INDEX  = YES 
COLS_IN_ALPHA_INDEX = 5 
IGNORE_PREFIX   = 
GENERATE_HTML   = YES 
HTML_OUTPUT   = html 
HTML_FILE_EXTENSION = .html 
HTML_HEADER   = 
HTML_FOOTER   = 
HTML_STYLESHEET  = 
HTML_COLORSTYLE_HUE = 220 
HTML_COLORSTYLE_SAT = 100 
HTML_COLORSTYLE_GAMMA = 80 
HTML_TIMESTAMP   = YES 
HTML_ALIGN_MEMBERS  = YES 
HTML_DYNAMIC_SECTIONS = NO 
GENERATE_DOCSET  = NO 
DOCSET_FEEDNAME  = "Doxygen generated docs" 
DOCSET_BUNDLE_ID  = org.doxygen.Project 
DOCSET_PUBLISHER_ID = org.doxygen.Publisher 
DOCSET_PUBLISHER_NAME = Publisher 
GENERATE_HTMLHELP  = NO 
CHM_FILE    = 
HHC_LOCATION   = 
GENERATE_CHI   = NO 
CHM_INDEX_ENCODING  = 
BINARY_TOC    = NO 
TOC_EXPAND    = NO 
GENERATE_QHP   = NO 
QCH_FILE    = 
QHP_NAMESPACE   = org.doxygen.Project 
QHP_VIRTUAL_FOLDER  = doc 
QHP_CUST_FILTER_NAME = 
QHP_CUST_FILTER_ATTRS = 
QHP_SECT_FILTER_ATTRS = 
QHG_LOCATION   = 
GENERATE_ECLIPSEHELP = NO 
ECLIPSE_DOC_ID   = org.doxygen.Project 
DISABLE_INDEX   = NO 
ENUM_VALUES_PER_LINE = 4 
GENERATE_TREEVIEW  = YES 
USE_INLINE_TREES  = NO 
TREEVIEW_WIDTH   = 250 
EXT_LINKS_IN_WINDOW = NO 
FORMULA_FONTSIZE  = 10 
FORMULA_TRANSPARENT = YES 
USE_MATHJAX   = NO 
MATHJAX_RELPATH  = http://www.mathjax.org/mathjax 
SEARCHENGINE   = YES 
SERVER_BASED_SEARCH = NO 
GENERATE_LATEX   = NO 
LATEX_OUTPUT   = latex 
LATEX_CMD_NAME   = latex 
MAKEINDEX_CMD_NAME  = makeindex 
COMPACT_LATEX   = NO 
PAPER_TYPE    = a4 
EXTRA_PACKAGES   = 
LATEX_HEADER   = 
PDF_HYPERLINKS   = YES 
USE_PDFLATEX   = YES 
LATEX_BATCHMODE  = NO 
LATEX_HIDE_INDICES  = NO 
LATEX_SOURCE_CODE  = NO 
GENERATE_RTF   = NO 
RTF_OUTPUT    = rtf 
COMPACT_RTF   = NO 
RTF_HYPERLINKS   = NO 
RTF_STYLESHEET_FILE = 
RTF_EXTENSIONS_FILE = 
GENERATE_MAN   = NO 
MAN_OUTPUT    = man 
MAN_EXTENSION   = .3 
MAN_LINKS    = NO 
GENERATE_XML   = NO 
XML_OUTPUT    = xml 
XML_SCHEMA    = 
XML_DTD    = 
XML_PROGRAMLISTING  = YES 
GENERATE_AUTOGEN_DEF = NO 
GENERATE_PERLMOD  = NO 
PERLMOD_LATEX   = NO 
PERLMOD_PRETTY   = YES 
PERLMOD_MAKEVAR_PREFIX = 
ENABLE_PREPROCESSING = YES 
MACRO_EXPANSION  = NO 
EXPAND_ONLY_PREDEF  = NO 
SEARCH_INCLUDES  = YES 
INCLUDE_PATH   = 
INCLUDE_FILE_PATTERNS = 
PREDEFINED    = 
EXPAND_AS_DEFINED  = 
SKIP_FUNCTION_MACROS = YES 
TAGFILES    = 
GENERATE_TAGFILE  = 
ALLEXTERNALS   = NO 
EXTERNAL_GROUPS  = YES 
PERL_PATH    = /usr/bin/perl 
CLASS_DIAGRAMS   = YES 
MSCGEN_PATH   = 
HIDE_UNDOC_RELATIONS = YES 
HAVE_DOT    = NO 
DOT_NUM_THREADS  = 0 
DOT_FONTNAME   = Helvetica 
DOT_FONTSIZE   = 10 
DOT_FONTPATH   = 
CLASS_GRAPH   = YES 
COLLABORATION_GRAPH = YES 
GROUP_GRAPHS   = YES 
UML_LOOK    = NO 
TEMPLATE_RELATIONS  = NO 
INCLUDE_GRAPH   = NO 
INCLUDED_BY_GRAPH  = NO 
CALL_GRAPH    = NO 
CALLER_GRAPH   = NO 
GRAPHICAL_HIERARCHY = YES 
DIRECTORY_GRAPH  = YES 
DOT_IMAGE_FORMAT  = png 
DOT_PATH    = 
DOTFILE_DIRS   = 
MSCFILE_DIRS   = 
DOT_GRAPH_MAX_NODES = 50 
MAX_DOT_GRAPH_DEPTH = 0 
DOT_TRANSPARENT  = NO 
DOT_MULTI_TARGETS  = NO 
GENERATE_LEGEND  = YES 
DOT_CLEANUP   = YES 


Edit:

Dưới đây là một định nghĩa phương pháp mẫu/khai rằng Doxygen là phàn nàn về (Tôi đã gỡ bỏ một số nội dung, như các loại tham số, vì nó được bảo vệ IP. Hiện tại không có macro sử dụng bất cứ nơi nào):

Algorithm.h

namespace CacheOpt { 
    class Algorithm { 
     protected: 
      /*..*/ 
     public: 
      virtual void init(/*..*/); 
      virtual std::string getName() = 0; 
    }; 
} //CacheOpt 

Algorithm.cpp

#include "Algorithm.h" 

void 
CacheOpt::Algorithm::init(/*..*/) { 
    /*..*/ 
} 

tôi nhận được lỗi này ở đây:

C:/Amir/Programming/Eclipse C++/CacheOptimization/src/Algorithm.cpp:11: warning: no uniquely matching class member found for void CacheOpt::Algorithm::init(/*..*/)

và nó thậm chí không iden tify Algorithm là một lớp học! Tôi có thể làm gì?

+0

Doxytags gây ra cảnh báo này là gì? Bạn có gì trong Doxyfile? –

+0

@James Tôi đã dán Doxyfile của mình. Doxytags là gì? –

+0

Dòng mã có gây ra cảnh báo cuộc gọi chức năng hoặc khối nhận xét không? Bạn đang cố gắng kết hợp một bình luận từ xa bằng cách sử dụng thẻ '\ function' (hay '@ function')? –

Trả lời

8

Nguyên nhân có thể:

  • Nếu bạn đang cố gắng để kết hợp điều khiển từ xa nhận với mã bằng cách sử dụng thẻ như \function\class, dừng lại. Đặt các chú thích tài liệu ngay lập tức trước khi mã được đề cập sẽ tự động liên kết nó, làm cho nó có nhiều khả năng người duy trì mã sẽ cập nhật nhận xét khi sửa đổi mã, và loại bỏ hoàn toàn gánh nặng của việc cập nhật chữ ký hàm trong nhận xét.

  • Thành viên lớp học có triển khai ngoài lớp có mã nguồn không khớp giữa chữ ký khai báo và định nghĩa. Theo tiêu chuẩn C++, những thứ như const cấp cao nhất không thay đổi chữ ký, nhưng doxygen hoạt động trên mã nguồn và cố gắng kết hợp mọi thứ bằng các quy tắc khác nhau từ trình biên dịch. Typedefs và macro cũng có thể đóng một vai trò, trong đó trình biên dịch nhìn thấy một định nghĩa tương ứng với khai báo trong khi doxygen thấy hai hàm riêng biệt. Có thể giải quyết vấn đề này bằng cách yêu cầu doxygen mở rộng các macro nhất định hoặc có thể cần phải tinh chỉnh khai báo để khớp chính xác với định nghĩa.

  • Sử dụng toán tử phạm vi có không gian tên hoặc nhiều lần trong cùng một tên. Một số mã doxygen giả định rằng toán tử phạm vi được sử dụng với các kiểu thay vì các không gian tên. Thay vào đó, việc sử dụng khối không gian tên là cách giải quyết hợp lý. Tôi cũng đã thấy các vấn đề mà toán tử phân giải phạm vi được sử dụng nhiều lần, doxygen có thể giữ quá nhiều phạm vi khi nó di chuyển để xử lý đoạn mã tiếp theo. Giữ mã của bạn đơn giản hơn, và doxygen sẽ thích nó hơn.

Ví dụ mã của bạn, điều này có thể làm việc tốt hơn:

#include "Algorithm.h" 

namespace CacheOpt 
{ 
    void Algorithm::init(/*..*/) 
    { 
     /*..*/ 
    } 
} 

Nếu đây là một cách giải quyết, cảm thấy tự do để sử dụng nó, nhưng cũng file a bug report trên the doxygen bug tracker.

+0

Tôi không cố gắng liên kết bất kỳ thứ gì và ngoại trừ một thẻ '\ brief' trong một lớp không liên quan hoạt động, tôi không sử dụng bất kỳ thẻ nào. –

+0

@Amir: Ok, đây là một ý tưởng khác. Ngoài ra, cảnh báo có xảy ra trên dòng nhận xét hay mã nguồn không? –

+0

@Ben cảnh báo là trên mã nguồn. –