2015-11-14 80 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

相关问题