0

请理解,我在写这篇文章时发烧了,此外,自从我使用 C++ 或相关的类以来,已经是几年前的事了。

我的问题在于 g++ 编译器拒绝我调用类标识符(+ 成员说明符)以及该类的实际成员。

这就是我的意思:

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

如果我选择调用这些成员之一(boderX、borderY、menu_item),如下所示:

window.borderX = [some value here];

我得到一个错误的回报:

错误:“。”之前的预期不合格 ID 令牌

当我查看 cplusplus 的网站时,此代码在语法上并不错误。然而,它拒绝编译?

这是来自 cplusplus 网站的示例:

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”没有命名类型

我不明白为什么它会返回这些错误。Window IS 用作标识符 - 或其类型。其次,它甚至不会从教授 C++ 使用的网站本身编译代码。

我正在等待在这些问题上得到纠正。另外,为了记录,我正在使用MingW。Code::Blocks 和 Netbeans 都产生相同的结果(是的,我知道它们是 IDE,而不是编译器。)

4

2 回答 2

4

'window' 定义了类,但您需要创建该类的实例才能使用它的非静态成员和方法。

您可以在堆栈上创建一个实例,

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 回答