2016-12-05 2 views
0

Учитывая такое небольшое приложениеТекст замены макросов

#include "stdafx.h" 

class IGraph 
{ 

}; 

#define NULLWrapper(n) class IG ##nWrapperNULL : public I##n 

class Test : public IGraph 
{ 

}; 

NULLWrapper(Graph) 
{ 

}; 

int main() 
{ 
    IGnWrapperNULL gw; 
    IGGraphWrapperNULL gw; 

    return 0; 
} 

Почему Visual Studio 2015 говорит, что IGGraphWrapperNULL не определено, в то время как IGnWrapperNULL правильно? Не следует ли заменить ##n на значение, которое я отправляю в параметры макросов?

+0

Вы можете создать предварительно обработанный файл в Visual Studio. Это покажет вам, что видит компилятор. Обе переменные в главном не могут иметь одно и то же имя. –

ответ

3

## не используется, чтобы «подкрепить» параметр макроса, используемый для объединения строк. Правильным определением будет:

#define NULLWrapper(n) class IG##n##WrapperNULL : public I##n 
Смежные вопросы