C ++类成员方法的条件编译

时间:2018-03-16 19:29:17

标签: c++ conditional-compilation

请您解释为什么使用条件编译的代码无法编译?

// Example program
#include <iostream>
#include <string>

class Foo{
    public:
#ifdef NUMBER
        int number(){
            return 0;
        }
#endif
        int number1(){
            return 1;
        }
};

int main()
{
#ifndef NUMBER
#define NUMBER
    Foo foo;
    std::cout << foo.number();
#endif 
    std::cout << foo.number1();
    return 0;
}

显示编译错误:

In function 'int main()':
22:26: error: 'class Foo' has no member named 'number'

1 个答案:

答案 0 :(得分:1)

如评论所述,预处理器仅前进

以下是未定义NUMBER 的代码行

// Example program
#include <iostream>
#include <string>

class Foo{
    public:
#ifdef NUMBER
        int number(){
            return 0;
        }
#endif
        int number1(){
            return 1;
        }
};

int main()
{
#ifndef NUMBER

以下是您的代码行NUMBER 定义

#define NUMBER
    Foo foo;
    std::cout << foo.number();
#endif 
    std::cout << foo.number1();
    return 0;
}

NUMBER仅在您#define NUMBER时定义。

在您的代码中,没有Foo::number()