查看: 1956|回复: 6

求高手指教!

[复制链接]

该用户从未签到

发表于 2012-5-3 12:02:15 | 显示全部楼层 |阅读模式
我把例程第五章的pick程序跑了一下出现编译错误:
c:\users\pc\documents\visual studio 2010\projects\ptr\ptr\main.cpp(281): error C2440: “初始化”: 无法从“const osg::NodePath”转换为“osg::NodePath &”      转换丢失限定符

我把 osg::NodePath& np = hitr ->nodePath ;这句代码前面加了个const,木有了错误,但是编不过,出现如下提示:
>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __thiscall osgFX::Scribe::Scribe(void)" (__imp_??0Scribe@osgFX@@QAE@XZ),该符号在函数 _main 中被引用
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual class osg::Object * __thiscall osgFX::Scribe::cloneType(void)const " (?cloneType@Scribe@osgFX@@UBEPAVObject@osg@@XZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual class osg::Object * __thiscall osgFX::Scribe::clone(class osg::CopyOp const &)const " (?clone@Scribe@osgFX@@UBEPAVObject@osg@@ABVCopyOp@4@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual bool __thiscall osgFX::Scribe::isSameKindAs(class osg::Object const *)const " (?isSameKindAs@Scribe@osgFX@@UBE_NPBVObject@osg@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual char const * __thiscall osgFX::Scribe::libraryName(void)const " (?libraryName@Scribe@osgFX@@UBEPBDXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual char const * __thiscall osgFX::Scribe::className(void)const " (?className@Scribe@osgFX@@UBEPBDXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall osgFX::Scribe::accept(class osg::NodeVisitor &)" (?accept@Scribe@osgFX@@UAEXAAVNodeVisitor@osg@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall osgFX::Effect::traverse(class osg::NodeVisitor &)" (?traverse@Effect@osgFX@@UAEXAAVNodeVisitor@osg@@@Z)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual char const * __thiscall osgFX::Scribe::effectName(void)const " (?effectName@Scribe@osgFX@@UBEPBDXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual char const * __thiscall osgFX::Scribe::effectDescription(void)const " (?effectDescription@Scribe@osgFX@@UBEPBDXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual char const * __thiscall osgFX::Scribe::effectAuthor(void)const " (?effectAuthor@Scribe@osgFX@@UBEPBDXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "public: virtual void __thiscall osgFX::Effect::setUpDemo(void)" (?setUpDemo@Effect@osgFX@@UAEXXZ)
1>main.obj : error LNK2001: 无法解析的外部符号 "protected: virtual bool __thiscall osgFX::Scribe::define_techniques(void)" (?define_techniques@Scribe@osgFX@@MAE_NXZ)
1>main.obj : error LNK2019: 无法解析的外部符号 "__declspec(dllimport) protected: virtual __thiscall osgFX::Scribe::~Scribe(void)" (__imp_??1Scribe@osgFX@@MAE@XZ),该符号在函数 "protected: virtual void * __thiscall osgFX::Scribe::`scalar deleting destructor'(unsigned int)" (??_GScribe@osgFX@@MAEPAXI@Z) 中被引用
1>C:\Users\pc\documents\visual studio 2010\Projects\PTR\Debug\PTR.exe : fatal error LNK1120: 14 个无法解析的外部命令


求高手指教!

该用户从未签到

 楼主| 发表于 2012-5-3 12:07:24 | 显示全部楼层
木人回复啊

该用户从未签到

发表于 2012-5-3 12:28:00 | 显示全部楼层
貌似你没加入osgFX依赖项导致的,试试这个:
#pragma comment(lib,"x:\osg\lib\osgFXd.lib")

该用户从未签到

 楼主| 发表于 2012-5-3 13:27:53 | 显示全部楼层
rcyboom 发表于 2012-5-3 12:28
貌似你没加入osgFX依赖项导致的,试试这个:
#pragma comment(lib,"x:\osg\lib\osgFXd.lib")

#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osg/Group>
#include <osgFX/Scribe>
#include <osgGA/GUIEventHandler>
#include <osgUtil/LineSegmentIntersector>
#pragma comment(lib,"C:\OSG\lib\osgFXd.lib")

class CPickHandler : public osgGA::GUIEventHandler
{
public:
        CPickHandler(osgViewer::Viewer* viewer):mViewer(viewer){}
        virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
        {
                switch(ea.getEventType())
                {
                case(osgGA::GUIEventAdapter:USH):
                        if (ea.getButton()==1)
                        {
                                Pick(ea.getX(), ea.getY());
                        }
                        return true;
                }
                return false;

        }

protected:
        void Pick(float x, float y)
        {
                osgUtil:ineSegmentIntersector::Intersections intersections;
                if (mViewer->computeIntersections(x, y, intersections))
                {
                        for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
                                hitr != intersections.end();
                                ++hitr)
                        {

                                if (!hitr->nodePath.empty() && !(hitr->nodePath.back()->getName().empty()))
                                {

                                        const osg::NodePath& np = hitr ->nodePath ;// const 是我加上的

                                        for (int i=np.size()-1; i>=0; --i)
                                        {
                                                osgFX::Scribe* sc= dynamic_cast<osgFX::Scribe *>(np);
                                                if (sc!= NULL)
                                                {
                                                        if(sc ->getNodeMask() != 0)
                                                                sc ->setNodeMask(0) ;
                                                }
                                               
                                        }
                                }
                        }
                }

        }
        osgViewer::Viewer* mViewer ;
};

int main(int, char**)
{
        osgViewer::Viewer viewer;
        osg::ref_ptr<osg::Group> root = new osg::Group();
        root ->addChild(osgDB::readNodeFile("cessna.osg"));
        osg::ref_ptr<osg::Node> cow  = osgDB::readNodeFile("cow.osg") ;

        osg::ref_ptr<osgFX::Scribe> sc = new osgFX::Scribe() ;
        sc ->addChild(cow.get()) ;

        root->addChild(cow.get ());
        root->addChild(sc.get ()) ;

        viewer.setSceneData(root.get ());
        viewer.addEventHandler(new CPickHandler(&viewer)) ;
        viewer.realize();
        viewer.run();
        return 0;
}


还是报错,帮忙看哈,有木有问题

该用户从未签到

 楼主| 发表于 2012-5-3 14:03:01 | 显示全部楼层
可以了,确实木有添加osgFXd.lib
谢谢楼上的好人,结贴啦!

该用户从未签到

发表于 2012-5-3 18:40:37 | 显示全部楼层
vs有个图形化界面加依赖项,但是我还是喜欢用语句来的比较简单,不知道你注意了没有,在include的时候
#include <osgFX/Scribe>
#include <osgGA/GUIEventHandler>
#include <osgUtil/LineSegmentIntersector>
/前面的其实是个目录,同时也是osg里面几个模块的名字,编译osg时会生成对应的lib文件。
我的做法是,将这些lib文件分debug和release版本两部分全部用
#pragma comment(lib,"C:\OSG\lib\osgFXd.lib")语句写好存到文本文件,然后在需要的时候只需要copy过来就行了,再将不必要的注释掉即可,如:
//#pragma comment(lib,"OpenThreadsd.lib")
#pragma comment(lib,"osgd.lib")
#pragma comment(lib,"osgDBd.lib")
//#pragma comment(lib,"osgUtild.lib")
//#pragma comment(lib,"osgViewerd.lib")
//#pragma comment(lib,"osgAnimationd.lib")
还有就是要注意带不带后缀d的问题,这个是看你编译debug还是release版本了。

该用户从未签到

 楼主| 发表于 2012-5-4 09:26:48 | 显示全部楼层
rcyboom 发表于 2012-5-3 18:40
vs有个图形化界面加依赖项,但是我还是喜欢用语句来的比较简单,不知道你注意了没有,在include的时候
#in ...

debug
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表