我在类声明之前定义一个宏。宏调用该类的成员函数。我的示例代码如下。

示例类声明,

// sample.h

#include <sstream>
#include <iostream>
using namespace std;

#define CALCULATETEMP(a, b, c) {
int d = Sample::getTempIncrement(a,b,c);
stringstream ss;
ss << d;
cout << ss.str() << endl;
}

class Sample {
public:
    Sample();
    int getTempIncrement(int a, int b, int c);
    ~Sample();
};

示例类实现,
//sample.cpp

#include "sample.h"
Sample::Sample() {
}

int Sample::getTempIncrement(int a, int b, int c) {
    int temp = 5;
    int d = (a*temp) + (b+c)*temp;
    return d;
}

Sample::~Sample() {
}

主程序
//main.cpp

#include "sample.h"

int main(int argc, char* argv[]) {
    int a = 1;
    int b = 2;
    int c = 3;
    CALCULATETEMP(a, b, c);
    return 0;
}

当我运行main.cpp时,在宏定义内的sample.h文件中出现错误:“Sample”不是类或 namespace 名称。

如何在类范围之外且在类声明之前调用该类的成员函数?我是编程的新手,谢谢您的反馈。

最佳答案

如果要宏跨越多行,则必须在每行末尾添加\:

#define CALCULATETEMP(a, b, c) {         \
int d = Sample::getTempIncrement(a,b,c); \
stringstream ss;                         \
ss << d;                                 \
cout << ss.str() << endl;                \
}

另外,为什么不只使用一个函数(而不使用stringstream)呢?
class Sample {
public:
    Sample();
    int getTempIncrement(int a, int b, int c);
    ~Sample();
};

void calctemp(int a, int b, int c) {
    int d = Sample::getTempIncrement(a,b,c);
    stringstream ss;
    ss << d;
    cout << ss.str() << endl; // why are you using stringstream? It could be
                              // just cout << d << endl;
}

关于c++ - 在类声明之前调用类的成员函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10488062/

10-12 21:43