2015-11-14 6 views
0

вот мой код, я не знаю, где ошибка рядом с «if», и что такое «первичное выражение» в c?ошибка: ожидаемое первичное выражение перед «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

В моем коде 'define xpath (smth, exp)', 'smth' возможно' xml_doc_ptr' или 'xml_node_ptr', когда' xml_doc_ptr' запускает 'xpath_doc', когда' xml_node_ptr' запускает 'xpath_node', как его реализовать? – nwaicaethi

Смежные вопросы