2013-04-11 146 views
2

尝试构建关于未解析的外部符号的项目时出现错误,但是我无法找到问题所在,哪里有任何想法?感谢无法解析的外部符号,C++

Tball.cpp

#include "Tball.h" 
#include <Windows.h> 
using namespace std; 



Tball::Tball(){ 

Position = TVector(70,0,70); 
Verlocity = TVector(1,0,1); 

} 

Tball.h

#ifndef Tball_h 
#define Tball_h 

#include <iostream> 
#include "mathex.h" 
#include "tvector.h" 


class Tball 
{ 

public: 

static TVector Position; 
static TVector Verlocity; 


Tball(); 
static void DrawBall(float x, float y, float z); 
static TVector MoveBall(); 
static void init(); 
static int loadbitmap(char *filename); 
static void SurfaceNormalVector(); 
static double Tball::collision(); 
static void Tball::pointz(); 



}; 


#endif 

错误:

1>------ Build started: Project: Breakout Complete, Configuration: Debug Win32 ------ 
1> Tball.cpp 
1> Generating Code... 
1>g:\work\second year\c++ breakout complete\breakout complete\tball.cpp(59): warning  C4715: 'Tball::MoveBall' : not all control paths return a value 
1> Skipping... (no relevant changes detected) 
1> Tvector.cpp 
1> TdisplayImp.cpp 
1> TBricks.cpp 
1>Tball.obj : error LNK2001: unresolved external symbol "public: static class  TVector  Tball::Verlocity" ([email protected]@@[email protected]@A) 
1>Tball.obj : error LNK2001: unresolved external symbol "public: static class  TVector  Tball::Position" ([email protected]@@[email protected]@A) 
1>G:\Work\Second year\C++ Breakout Complete\Debug\Breakout Complete.exe : fatal error  LNK1120: 2 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

没有我试过似乎为我工作。

+7

你可以编辑你的问题,包括确切的错误吗?你使用的build命令的注释也非常方便。 – simonc 2013-04-11 12:41:29

+0

Woops,对不起,请务必 – Unknown 2013-04-11 12:42:47

+0

顺便它的拼写“速度” :) – 2013-04-11 12:43:25

回答

10

要把它放到你的CPP:

TVector Tball::Position(/* contructor params */); 
TVector Tball::Verlocity(/* contructor params */); 

这使得这些成员静态变量的 “空间”。

+0

完美眼花缭乱通过它,谢谢! – Unknown 2013-04-11 12:49:23

+0

你在哪里放线?不要把它们放到构造器中,而应该在'using namespace std;'后面立即使用。 – Zoka 2013-04-11 12:50:22

+0

最初当我觉得有我把它们在构造一个问题,但现在他们使用命名空间std后后;它的伟大工程 – Unknown 2013-04-11 12:54:10

2

我没有看到的

static TVector Position; 
static TVector Verlocity; 

这个定义只是声明。您需要在一个.ccp文件中使用一些构造函数(可能是默认的)来定义它。静态成员不是每个对象的一部分,需要在对象构造函数以外的地方创建。

你的情况:

Tball.cpp

#include "Tball.h" 
#include <Windows.h> // Why? 
//using namespace std; Why?? 


TVector Tball::Position(70,0,70); 
TVector Tball::Verlocity(1,0,1); 

Tball::Tball(){} 
1

最有可能的(因为有发布任何错误),你错过的

static TVector Position; 
static TVector Verlocity; 

定义为了解决这个问题添加

Tball::Position(70,0,70); 
Tball::Verlocity(1,0,1); 

给你r .cpp,并从构造函数中删除它的初始化。

+0

我认为,它会抱怨定义static关键字。 – Zoka 2013-04-11 12:56:36

+0

谢谢,解决了。 – alexrider 2013-04-11 13:04:24