游戏开发论坛

 找回密码
 立即注册
搜索
查看: 6528|回复: 8

求教关于一个调试的问题:CLoad3DS

[复制链接]

9

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
发表于 2005-11-5 16:01:00 | 显示全部楼层 |阅读模式
各位网友好,谢谢你们的阅读.
我在自学OpenGL编程,编了第一程序,编译是可以通过的,但调试结果如下:
--------------------Configuration: show - Win32 Debug--------------------
Linking...
baiscobj.obj : error LNK2001: unresolved external symbol "public: void __thiscall CLoad3DS::Init(char *,int)" (?Init@CLoad3DS@@QAEXPADH@Z)
baiscobj.obj : error LNK2001: unresolved external symbol "public: void __thiscall CLoad3DS::show3ds(int,float,float,float,float)" (?show3ds@CLoad3DS@@QAEXHMMMM@Z)
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/show.exe : fatal error LNK1120: 4 unresolved externals
Error executing link.exe.

show.exe - 5 error(s), 0 warning(s)

请各位网友看看是什么原因.我把部分代码拷过来:
___________________baiscobj .h____________________
#include "../include/3DS.H"
class baiscobj  
{
public:
        baiscobj();
        virtual ~baiscobj();
public:
                CLoad3DS* m_3ds;
        void load3dobj(char* dir,char* cn,int a);
        void Scene(int obj,float x,float h,float z,float r,int re,float size);//显示对象
};

_________________baiscobj .cpp___________________
#include "stdafx.h"
#include "baiscobj.h"
baiscobj::baiscobj()
{       
        char        appdir[256];
        GetCurrentDirectory(256,appdir);
       
}
baiscobj::~baiscobj()
{        }
void baiscobj::load3dobj(char* dir,char* cn,int a)
{        char        appdir[256];
        GetCurrentDirectory(256,appdir);
        SetCurrentDirectory(dir);
        m_3ds->Init(cn,a);
        SetCurrentDirectory(appdir);
}
void baiscobj::Scene(int obj,float x,float h,float z,float r,int re,float size)
{         glPushMatrix();
         int y=h;
         glTranslatef(x,y,z);       
         glRotatef(re, 0.0, 1.0, 0.0);       
         if(obj>0) glRotatef(-20, 1.0, 0.0, 0.0);       
         m_3ds->show3ds(0,0,0.0f,r,size);
         glPopMatrix();
}abc [em24]

2

主题

7

帖子

822

积分

高级会员

Rank: 4

积分
822
QQ
发表于 2005-11-5 22:50:00 | 显示全部楼层

Re:求教关于一个调试的问题:CLoad3DS

你是照办“和平鸽工作室”的《OpenGL三维图形系统开发与实用技术》上的代码吧。
类CLoad3DS必须自己实现,Visual Studio中没有实现这个东西。
其实很简单,照着书上1.1.3节,将所有的代码都敲进去。其中“(1)定义3DS文件的读入类CLoad3DS”下面的代码保存为3ds.h文件
“(2)CLoad3DS的成员函数”下面的代码保存为3ds.cpp文件。就OK。
另外,将你的baiscobj .h文件中的
#include "../include/3DS.H"
改成
#include "3ds.h"

不过这个方法比较笨,你要是有光盘的话,就将里面的3DS.H和3DS.cpp文件拷贝过来试试。

《OpenGL三维图形系统开发与实用技术》大体上是在将如何运用OpenGL库,如果你并不了解图形学和OpenGL的使用方法而直接看这本书不太好。
OpenGL入门推荐《OpenGL程序设计指南(第二版)》 Edward Angel著 李桂琼 张文详译 清华大学出版社 “国外经典教材.计算机科学与技术”系列 蓝色封皮 26元。我正在看这本书,已经看到第五章“变换”了,感觉出了透视投影这一快以外,其它讲得都不错。
对于透视投影,这本书差了一句话:
glFrustum和gluPerspectvie这两个函数建立的视锥,默认情况下(即far>near>0),视点位于原点,朝向z的负半轴。

9

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2005-11-6 10:26:00 | 显示全部楼层

Re:求教关于一个调试的问题:CLoad3DS

非常感谢lophyxp!
我在看<<三维游戏设计师宝典  学OpenGL编3D游戏>>.
"../include/"目录下有3DS.H和3DS.cpp文件.
但是您启发了我,当我把3DS.cpp文件加入我的"工程"中后,调试结果:错误少了两个.剩下3个错误:
--------------------Configuration: show - Win32 Debug--------------------
Compiling...
baiscobj.cpp
Generating Code...
Compiling...
OpenGL.cpp
show.cpp
Generating Code...
Linking...
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
Debug/show.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

show.exe - 3 error(s), 0 warning(s)
肯定是连接上的错误.
能否再帮忙看看问题具体出在哪里?谢谢!

5

主题

217

帖子

222

积分

中级会员

Rank: 3Rank: 3

积分
222
发表于 2005-11-6 14:31:00 | 显示全部楼层

Re:求教关于一个调试的问题:CLoad3DS

bs一下
你没开多线程
在vs里面开多线程支持

9

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2005-11-7 20:57:00 | 显示全部楼层

Re:求教关于一个调试的问题:CLoad3DS

谢谢MathSlope!
您说的开多线程就是在程序中创建线程吧。
我现在还没学会怎样利用线程的技术,目前解决不了这个问题,我现在看的书也没谈到线程的事。
有谁愿意教我如何在vc中利用线程?
谢谢!

24

主题

256

帖子

267

积分

中级会员

Rank: 3Rank: 3

积分
267
发表于 2005-11-8 08:33:00 | 显示全部楼层

Re:求教关于一个调试的问题:CLoad3DS

这样的连接错误没见到过,没法帮你。作为初学者应该从入门开始,这个的程序你可能一下啃不下来。

6

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2005-11-9 16:04:00 | 显示全部楼层

Re:求教关于一个调试的问题:CLoad3DS

__endthreadex和__beginthreadex需要C run-time libraries 的多线程版本的,在项目属性的代码生成项中选则链接多线程库就行了。

9

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2005-11-10 21:02:00 | 显示全部楼层

Re:求教关于一个调试的问题:CLoad3DS

谢谢lucky420,同时也谢谢huawenguang.
恳请lucky420能否再深入一步?
C run-time libraries 的多线程版本在visioul c++6.0中有吗?
安装的时候确实发现有c++Runtime Libraries的选项.
如何在项目属性的代码生成项中选则链接多线程库?
是否在"工程"菜单栏中找:设置活动工程/添加工程/来源控制/从属性.../设置...ALT+F7/输出制作文件/插入工程到工作区 ?但是我总是找不到.
同时恳请其他愿意帮忙的网友来帮忙.
谢谢!

9

主题

53

帖子

53

积分

注册会员

Rank: 2

积分
53
 楼主| 发表于 2005-11-10 23:39:00 | 显示全部楼层

Re:求教关于一个调试的问题:CLoad3DS

非常感谢lucky420的提示.
我把操作系统以及Visioul C++6.0重新安装了一遍,运行结果没有错误.
感谢lucky420,lophyxp,MathSlope,huawenguang!
谢谢GameRes游戏开发论坛.


[em13] [em13] [em13]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 15:10

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表