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

Можете ли вы отредактировать свой вопрос, указав точные ошибки, пожалуйста? Заметка команды сборки, которую вы используете, тоже очень удобна. – simonc

+0

Woops, извините, конечно – Unknown

+0

Как в сторону написано «Velocity» :) –

ответ

10

Put это в вашем CPP:

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

Это делает "пространство" для этих членов статических переменных.

+0

Отлично, спасибо! – Unknown

+0

Где вы положили линии? Не помещайте их в contructor, но сразу после 'using namespace std;' line. – Zoka

+0

Первоначально, когда я думал, что возникла проблема, я поместил их в конструктор, но теперь они после использования пространства имен std; он отлично работает – Unknown

2

Я не вижу определения

static TVector Position; 
static TVector Verlocity; 

это только декларации. Вам нужно будет определить его, используя некоторый contructor (возможно по умолчанию) в одном .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

Я думаю, он будет жаловаться на статическое ключевое слово в определении. – Zoka

+0

Спасибо, исправлено это. – alexrider

Смежные вопросы