我想要实现的是创建这三个类,如代码中所提到的,只是尝试使用预处理器,以便可以创建和执行这些类似的类,而不是为它们编写单独的代码:
#include <iostream>
#define MYMACRO(len,baselen)
using namespace std;
class myclass ## len
{
int MYVALUE ## baselen;
public:
myclass ## len ## ()
{
cout << endl;
cout << " For class" ## len ## "'s function 'myFunction" ## len ## "' the value is: " << MYVALUE ## baselen << endl;
}
};
int main()
{
MYMACRO(10,100)
//myclass10 ob1;
MYMACRO(20,200)
//myclass20 ob2;
MYMACRO(30,300)
//myclass30 ob3;
myclass10 ob1;
myclass20 ob2;
myclass30 ob3;
cout << endl;
return 0;
}
现在我不知道它是否可以完成&amp;因为我收到了这个错误。如果是,那么请有人解决错误并启发我,如果没有那么请给出相同的原因所以我也放心,我们在同一页面!错误是:
[root@localhost C++PractiseCode]# g++ -o structAndPreprocessor structAndPreprocessor.cpp
structAndPreprocessor.cpp:5: error: invalid token
structAndPreprocessor.cpp:6: error: invalid function declaration
structAndPreprocessor.cpp:7: error: invalid token
structAndPreprocessor.cpp:9: error: invalid token
structAndPreprocessor.cpp:9: error: invalid token
structAndPreprocessor.cpp:12: error: invalid token
structAndPreprocessor.cpp:12: error: invalid token
structAndPreprocessor.cpp:12: error: invalid token
structAndPreprocessor.cpp:12: error: invalid token
structAndPreprocessor.cpp:12: error: invalid token
structAndPreprocessor.cpp: In function `int main()':
structAndPreprocessor.cpp:25: error: `myclass10' was not declared in this scope
structAndPreprocessor.cpp:25: error: expected `;' before "ob1"
structAndPreprocessor.cpp:26: error: `myclass20' was not declared in this scope
structAndPreprocessor.cpp:26: error: expected `;' before "ob2"
structAndPreprocessor.cpp:27: error: `myclass30' was not declared in this scope
structAndPreprocessor.cpp:27: error: expected `;' before "ob3"
[root@localhost C++PractiseCode]#
答案 0 :(得分:5)
您需要在行的每一端使用\
来定义宏(并且可能会从宏中删除using语句)
using namespace std;
#define MYMACRO(len,baselen) \
class myclass ## len \
{ \
int MYVALUE ## baselen; \
(...snip...) \
}\
};
注意最后一行没有逃脱
很可能你在做Cpp并且不鼓励使用Macros。您最好使用模板或传统动态代码(根据您的需求进行调整)。与宏相比,模板在编译时带来了额外的类型检查,并提供了更易读的错误消息。
答案 1 :(得分:0)
您提供的宏解决方案是我之前使用过的解决方案,但我会以不同的方式看待它。对于除了最简单的代码之外的所有代码,宏解决方案都是难以维护和难以维护和调试的。
您是否考虑过从模板中生成所需的代码?使用Cheetah或Mako填写源模板会更加清晰,您可以从配置文件中驱动生成,因此您不必手动维护类列表。
你有一个myclass.tmpl模板文件,如下所示:
#for len, baselen in enumerate(mylist_of_classes_i_want_to_generate)
class MyClass$len
{
int MYVALUE$baselen;
public:
MyClass$len()
{
cout << endl;
cout << " For class $len's function 'myFunction $len' the value is: " << MYVALUE$baselen << endl;
}
};
#end for
然后,您可以在编译之前调用cheetah在构建流程开始时自动生成代码。