在类声明之前调用类的成员函数

Calling member functions of a class before class declaration

本文关键字:成员 函数 调用 声明      更新时间:2023-10-16

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

样本类声明,

// 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"不是类或命名空间名称。

如何在类范围之外和类声明之前调用类的成员函数?我对编程很陌生,您的反馈会对我有所帮助,谢谢。

如果您希望宏跨越多行,则必须将放在每行的末尾:

#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;
}
我相信

还有另一个问题。Sample::getTempIncrement() 未声明为静态,因此您需要宏中可用的示例实例。

你已经定义了CALCULATETEMP(a,b,c),用{替换预处理器,然后用一堆全局空间编码,这是非常非法的。

我建议回到有关预处理器宏的教程和/或阅读内联函数。