2011-04-29 23 views
0

私は、クラスとC++のオブジェクト指向のサイドを使用することにかなり新しいですし、タイトルにエラーを取得します。エラー: '。'の前に期待される初期化子トークン

私はSDLを使ってテトリスのゲームを書いています。

私はまたのために別々のファイルを持っているSHAPES.H

class shape 
{ 
public: 
    SDL_Surface *colour; 
    int rotation1[4][4]; 
    int rotation2[4][4]; 
    int rotation3[4][4]; 
    int rotation4[4][4]; 

    bool load(); 
    void move(); 

    shape(); 
}; 

とmain.hiにSHAPES.Hが含まれていると

//Create shapes 
shape O, T, S, L, R, Z, I; 

でクラスのインスタンスを定義した中クラス定義を持っています各シェイプのI.cppなどの各シェイプは、SDL_Surfaceカラーとブロックのさまざまな回転のさまざまな配列に対してブロックの色のイメージをロードするための異なるコードを持つため、これをブロックごとに1つのファイルに分けます。 I.cppで

私はmain.hを含め、次のように私のためのロード機能を設定しようとしている:

bool I.load() 
{ 
    //if loading the cyan square texture fails 
    if ((I.colour = surface::onLoad("../Textures/cyanSquare.png")) == NULL) 
    { 
     //print error 
     cout << "Unable to load cyanSquare.png"; 
     //return fail 
     return false; 
    } 

    I.rotation1 = {{7,7,7,7}, 
        {0,0,0,0}, 
        {0,0,0,0}, 
        {0,0,0,0}}; 
    I.rotation2 = {{0,0,7,0}, 
        {0,0,7,0}, 
        {0,0,7,0}, 
        {0,0,7,0}}; 
    I.rotation3 = {{7,7,7,7}, 
        {0,0,0,0}, 
        {0,0,0,0}, 
        {0,0,0,0}}; 
    I.rotation4 = {{0,0,7,0}, 
        {0,0,7,0}, 
        {0,0,7,0}, 
        {0,0,7,0}}; 

    return true; 
} 

を私は(GCCを使用して)これをコンパイルしようとすると、それはライン上のエラーを報告I.cppの3:

error: expected initializer before '.' token 

私はこれが何を意味するのか全く見当がつかない、とこのエラーコードのためのGoogleの検索に使用する何かを見つけることができませんでしたので、任意の助けをいただければ幸いです。

+2

コンパイラを入れて[良い本](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)を拾うことがあります。 –

答えて

2
bool I.load() 

bool shape::load()

私はちょうど '形'のインスタンスです。 '私'インスタンスについて何も知らないので、関数の実装の中でどのように '私'を使うことができますか?

あなたはおそらくこれやりたい:(

shape::shape(const char* image_path) : m_pImagePath(pImagePath) {} 

あなたの負荷:として

class shape 
{ 
public: 
//.... 

    shape(const char* pImagePath); 
private: 
    const char* m_pImagePath; 
}; 

とコンストラクタを実装: 1.インスタンスの画像を指定するためのパラメータと構文を追加します)は、次のように実装できます。

bool shape::load() 
{ 
    //if loading the cyan square texture fails 
    if ((colour = surface::onLoad(m_pImagePath)) == NULL) 
    { 
     cout << "Unable to load cyanSquare.png"; 
     return false; 
    } 

    rotation1 = {{7,7,7,7}, 
       {0,0,0,0}, 
       {0,0,0,0}, 
       {0,0,0,0}}; 
    rotation2 = {{0,0,7,0}, 
       {0,0,7,0}, 
       {0,0,7,0}, 
       {0,0,7,0}}; 
    rotation3 = {{7,7,7,7}, 
       {0,0,0,0}, 
       {0,0,0,0}, 
       {0,0,0,0}}; 
    rotation4 = {{0,0,7,0}, 
       {0,0,7,0}, 
       {0,0,7,0}, 
       {0,0,7,0}}; 

    return true; 
} 

インスタンス 'I'をfoフラット表示:

shape I("../Textures/cyanSquare.png"); 
+0

私はそれが働くと思うので、クラスのインスタンスごとに異なる関数を指定することはできません。なぜなら、わかるように、それぞれ異なる配列と異なるテクスチャを持つからです。私がばかげていると私は残念です、私は以前にクラスを使用したことはありません申し訳ありません。 – FrogInABox

+0

私はあなたのメソッドを使いましたが、インスタンス 'I'を作成する以外には問題なく動作しています - '文字列定数の前に期待識別子 'と' expected'、 'or .. '文字列定数の前に' – FrogInABox

4

これは有効ではありません。 Iは変数です。特定の変数(bool I.load())にメンバー関数を定義することはできません。おそらく、あなたはbool shape::load()を意味しましたか?

関連する問題