msvc编译器的字符编码问题

 已解决:字符编码问题。用记事本将文件编码改为unicode即可


   

 制作制图功能时,我决定直接原样照抄copy源码,将QgsComposer类改为fComposer,调试一下删除不用的功能。再在主界面的类中把源码主界面的QgsApp类中涉及到composer的功能全部复制过来。

稍作修改后,惊奇地发现,新建和删除composer的两个函数死活通不过编译,而且报的错非常奇怪:

error: C2039: “createNewComposer”: 不是“MainWindow”的成员

error: C2039: “deleteComposer”: 不是“MainWindow”的成员

    /** Creates a new composer and returns a pointer to it*/
    QgsComposer* createNewComposer( QString title = QString() );
    /** Deletes a composer and removes entry from Set*/
    void deleteComposer( QgsComposer *c )

 

测试了大半天,偶然发现,似乎是因为我把doxygen注释修改成中文造成的问题。

    /** 创建一个新的composer并返回指针*/
    fComposer* createNewComposer(QString title = QString());

    /** 删除指定composer并从Set移除*/
    void deleteComposer( fComposer *c );

       把注释改为双斜杠或者改回英文就好了。不过我还是没有摸清bug的规律,因为这两个函数下面明明紧接着又是一个doxygen+中文注释的函数,从始至终却异常安静没有报错。事实上,当我为了写这个博客改回doxygen+中文注释试图重现bug时,deleteComposer函数却又不报错了!

总之以后慎用doxygen注释,老老实实用双斜杠好了。

 

posted @ 2017-11-10 23:42  Freeza  阅读(306)  评论(0编辑  收藏  举报