还是改写宏的问题 有点错误 请求指点 50分!(昨天帮忙的都给分了,谢谢大家)
经过高人提点 昨天的宏改为如下 但有个编译上的错误 请大家给点建议 谢谢!
// 以下是原来的宏
#define START_EXPLAIN \
private: \
static void explain_macro() \
{
////////////////////////////////////////////////////////////////////////
#define EXPLAIN(line){ \
std::string anStr(line);\
CPPUNIT::GlobalListener::instance()-> addInfo( "EXPLAIN ", anStr.c_str()); \
}
////////////////////////////////////////////////////////////////////////
#define END_EXPLAIN \
} \
public:
// 以下是经过修改后的
#define START_EXPLAIN
class Start_explain{
public:
//
//
// //////////////////////////////////////////////////////////////////////////
#define EXPLAIN(line){
Start_explain(char *line){
std::string anStr(line);
CPPUNIT::GlobalListener::instance()-> addInfo( "EXPLAIN ", anStr.c_str());
} //构造函数
//
//
// //////////////////////////////////////////////////////////////////////////
#define END_EXPLAIN
}
};
总是出现4个编译错误,如下:
error C2143: syntax error : missing '; ' before '} '
error C2143: syntax error : missing '; ' before '} '
error C2143: syntax error : missing '; ' before '} '
error C2143: syntax error : missing '; ' before '} '
大虾们,帮帮小弟想想咋回事啊,谢谢!!!
[解决办法]
宏之间换行要用 \ 连接,你看你原始的代码就知道了
[解决办法]
#define EXPLAIN(line){
Start_explain(char *line){
std::string anStr(line);
CPPUNIT::GlobalListener::instance()-> addInfo( "EXPLAIN ", anStr.c_str());
} //构造函数
//
//
// //////////////////////////////////////////////////////////////////////////
#define END_EXPLAIN
}
};
#define EXPLAIN(line){ // 这里的半个括号多于
} //这一行都多余
};
//删掉这一对括号应该就好了
[解决办法]
#define EXPLAIN(line){ // 这里的半个括号多于
} //这一行都多余
};
//删掉这一对括号应该就好了
你把他替换展开看看就知道了,大致是
class AA
{
{ //平白多出来的括号
构造函数...
} //平白多出来的括号
}
------解决方案--------------------
怎么连接....
不是叫你参考你原始的代码吗
#define START_EXPLAIN \
^这里
private: \
^这里
static void explain_macro() \
^还有这里
{
一个宏要是没结束就要换行,那么换行的地方加上一个 \符号就行了,告诉编译器,下面一行是属于当前宏的
[解决办法]
\后面不可以再有任何字符
兄弟,C语言基本功不过关呀。
[解决办法]
在 当前行末尾增加一个 \ 进行续行就可以了 ...
[解决办法]
比如这行class Start_explain { \
后面空格多着呢。
[解决办法]
嗯,你的\后面有很多空格,虽然看不见,去掉就好了
[解决办法]
\在C/C++里作为转义符处理,在行尾表示取消该行尾的行结束符(0x0d,换行符看不见)。你如果在\之后再有其它的东西,那就不是取消换行了,而是转义成其它东西了。