0

これを書いている間、私は強い熱を持っていることを理解してください。さらに、私が C++ やクラスを使用してから何年も経っています。

私の問題は、クラス識別子(+メンバー指定子)とそのクラスの実際のメンバーの呼び出しを拒否するg ++コンパイラにあります。

これが私が意味することです:

class window{
public:
int borderX, borderY, menu_item;
};

これらのメンバー (boderX、borderY、menu_item) のいずれかを呼び出すことを選択した場合、次のようになります。

window.borderX = [some value here];

見返りにエラーが発生します:

エラー: '.' の前に unqualified-id が必要です トークン

cplusplus の Web サイトを見ると、このコードは文法的に正しくありません。それでも、コンパイルを拒否しますか?

cplusplus の Web サイトの例を次に示します。

class CRectangle {
    int width, height;
  public:
    void set_values (int, int);
    int area (void) {return (width * height);}
};
CRectangle rect;
  rect.set_values (3,4);

このコードもコンパイルされません!

次のエラーが返されます。

エラー: 'rect' は型を指定していません

これらのエラーが返される理由がわかりません。ウィンドウは識別子またはそのタイプとして使用されます。そして第二に、C ++の使用を教えるWebサイト自体のコードをコンパイルすることさえしません。

これらの問題について修正されるのを待っています。また、記録のために、私はMingWを使用しています。Code::Blocks と Netbeans の両方で同じ結果が得られます (はい、コンパイラではなく IDE であることはわかっています)。

4

2 に答える 2

4

「ウィンドウ」はクラスを定義しますが、非静的メンバーとメソッドを使用するには、そのクラスのインスタンスを作成する必要があります。

スタック上にインスタンスを作成するか、

window w;
w.borderX = [some value here];

またはヒープ上に作成し、

window *w = new window();
w->borderX = [some value here];
于 2012-09-28T20:27:26.420 に答える
3

これを試して:

まず、クラスを宣言します。window.h 内

#include <iostream> // for cout and endl

class Window{
public:
    int borderX, borderY, menu_item;
};

プログラムを開始するメインファイルで:

#include <window.h>
int main() {
    // 1. make an instance of Window
    Window w;         

    // 2. set some values
    w.borderX = 12;   
    w.borderY = 8;
    w.menu_item = 7;

    // 3. print the values
    std::cout << "X: "  << w.borderX 
              << " Y: " << w.borderY 
              << " menu item: " << w.menu_item << std::endl;

    //OR with a pointer
    // 1. create a new pointer that points to 
    //    an instance of Window (which is also create in the process)
    Window pw = new Window(); 

    // 3. set some values
    pw->borderX = 9;           
    pw->borderY = 12;
    pw->menu_item = 18;

    // 3. print the values
    std::cout << "X: "<< pw->borderX << " Y: " << pw->borderY 
              << " menu item: " << pw->menu_item << std::endl;

    // 4. Rule: for every *new* (new Window()) there is 1 delete
    //    So every pointer should be deleted somewhere 1 time to avoid memory leaks
    delete pw; 

    return 0;
}

そして、あなたがすぐに良くなることを願っています。熱があってもおかしくありません。

于 2012-09-28T20:30:27.700 に答える