首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

还是改写宏的有关问题 有点异常 请求指点 50分!(昨天帮忙的都给分了,多谢大家)

2012-02-06 
还是改写宏的问题 有点错误 请求指点 50分!(昨天帮忙的都给分了,谢谢大家)经过高人提点昨天的宏改为如下但

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

热点排行