读书人

还是改写宏的有关问题 有点异常 请求指

发布时间: 2012-02-06 15:52:45 作者: rapoo

还是改写宏的问题 有点错误 请求指点 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,换行符看不见)。你如果在\之后再有其它的东西,那就不是取消换行了,而是转义成其它东西了。

读书人网 >C++

热点推荐