Этот код компилируется и работает просто нормально: < /p>
Код: Выделить всё
#pragma once
#include
class TestCaseT : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(TestCaseT);
CPPUNIT_TEST(TestFunc);
CPPUNIT_TEST(TestFunc);
CPPUNIT_TEST_SUITE_END();
protected:
template void TestFunc()
{
// to test
}
};
< /code>
Однако, когда моя функция принимает больше параметров, она не может компилировать: < /p>
class TestCaseT : public CPPUNIT_NS::TestFixture
{
CPPUNIT_TEST_SUITE(TestCaseT);
CPPUNIT_TEST(TestFunc);
CPPUNIT_TEST(TestFunc);
CPPUNIT_TEST(TestFunc);
CPPUNIT_TEST_SUITE_END();
protected:
template void TestFunc()
{
// to test
}
};
< /code>
ошибка: < /p>
test.h(8,5): warning C4002: trop d'arguments pour l'appel de macro de type fonction 'CPPUNIT_TEST'
1>test.h(9,5): warning C4002: trop d'arguments pour l'appel de macro de type fonction 'CPPUNIT_TEST'
1>test.h(8,5): error C2059: erreur de syntaxe : ')'
1>test.h(9,5): error C2059: erreur de syntaxe : ')'
1>test.h(10,5): error C2059: erreur de syntaxe : ')'
1>test.h(11,5): error C2143: erreur de syntaxe : absence de ';' avant '}'
...
< /code>
macro cppunit_test определяется, как ниже: < /p>
#define CPPUNIT_TEST( testMethod ) \
CPPUNIT_TEST_SUITE_ADD_TEST( \
( new CPPUNIT_NS::TestCaller( \
context.getTestNameFor( #testMethod), \
&TestFixtureType::testMethod, \
context.makeFixture() ) ) )
Подробнее здесь: https://stackoverflow.com/questions/797 ... parameters