2013-04-11 123 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