2015-11-14 93 views
0

這裏是我的代碼,我不知道'if'附近有什麼錯誤,什麼是c中的「primary-expression」?錯誤:在'if'之前預期的初級表達式

xml_parser.h

#define xpath(smth, exp) if (sizeof(*smth) == sizeof(xmlNode)) { xpath_node((xml_node_ptr)smth, exp); } else{ xpath_doc((xml_doc_ptr)smth, exp); } 

xml_node_ptr *xpath_node(xml_node_ptr n, str exp); 

xml_node_ptr *xpath_doc(xml_doc_ptr n, str exp); 

xml_parser_test.cpp

TEST_F(XmlParserTest, xpath2) { 
    xml_node_ptr n = xpath(d, "/html/body"); 
    xpath(n, "/div"); 
} 

這裏是我的輸出:

/home/roroco/Dropbox/rbs/ro_sites/c/xml_parser_test.cpp: In member function ‘virtual void XmlParserTest_xpath2_Test::TestBody()’: 
/home/roroco/Dropbox/rbs/ro_sites/c/xml_parser.h:17:26: error: expected primary-expression before ‘if’ 
#define xpath(smth, exp) if (sizeof(*smth) == sizeof(xmlNode)) { xpath_node((xml_node_ptr)smth, exp); } else{ xpath_doc((xml_doc_ptr)smth, exp); } 
         ^
/home/roroco/Dropbox/rbs/ro_sites/c/xml_parser_test.cpp:26:22: note: in expansion of macro ‘xpath’ 
    xml_node_ptr n = xpath(d, "/html/body"); 
       ^

我的全部源代碼是here

+0

看起來像這個宏可能是一個正常的函數就好了。 – chris

回答

2

你的代碼是預tty多擴展到

xml_node_ptr n = if (sizeof(*d) == sizeof(xmlNode)) { xpath_node((xml_node_ptr)d, "/html/body"); } else{ xpath_doc((xml_doc_ptr)d, "/html/body"); } 

由預處理器。很明顯,這是錯誤的。要回答第二個問題,primary-expression是C++語法中預期的非終端。主要表達式就像算術,函數調用等。

+0

你能告訴我如何傳遞變量類型的參數嗎? – nwaicaethi

+0

@nwaicaethi你將不得不更具體。 –

+0

當'xml_node_ptr'運行'xpath_node'時,在'xml_doc_ptr'運行'xpath_doc'時,我的代碼是'define xpath(smth,exp)','smth'可能是'xml_doc_ptr'或'xml_node_ptr',如何實現? – nwaicaethi

相關問題