2

未解決の外部シンボルに関するプロジェクトをビルドしようとするとエラーが発生しますが、問題がどこにあるのかわかりません。誰かアイデアがありましたか? ありがとう

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" (?Verlocity@Tball@@2VTVector@@A)
1>Tball.obj : error LNK2001: unresolved external symbol "public: static class     TVector     Tball::Position" (?Position@Tball@@2VTVector@@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 ==========

私が試したことは何もありません。

4

3 に答える 3

10

これをあなたのcppに入れてください:

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

これにより、これらのメンバー静的変数の「スペース」が作成されます。

于 2013-04-11T12:45:28.567 に答える
2

の定義がわかりません

static TVector Position;
static TVector Verlocity;

これは宣言のみです。1 つの .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(){}
于 2013-04-11T12:45:59.057 に答える
1

ほとんどの場合(エラーが投稿されていないため)の定義を見逃しています

static TVector Position;
static TVector Verlocity;

この追加を修正するには

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

.cpp に追加し、コンストラクターから初期化を削除します。

于 2013-04-11T12:48:23.800 に答える