请理解我写这篇文章的时候发烧很厉害,此外,几年前我已经使用过C ++ - 或类似的课程。
我的问题在于g ++编译器拒绝我调用类标识符(+成员说明符),以及该类的实际成员。
这就是我的意思:
class window{
public:
int borderX, borderY, menu_item;
};
如果我选择调用其中一个成员(boderX,borderY,menu_item),请执行以下操作:
window.borderX = [some value here];
我收到错误的回复:
错误:'。'之前的预期unqualified-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'没有命名类型
我不明白为什么它会返回这些错误。窗口IS用作标识符 - 或其类型。其次,它不会从编写C ++使用的网站本身编译代码。
我正等着纠正这些问题。 另外,为了记录,我使用的是MingW。 Code :: Blocks和Netbeans都产生相同的结果(是的,我知道它们是IDE,而不是编译器。)
答案 0 :(得分:4)
'window'定义了类,但是你需要创建该类的实例才能使用它的非静态成员和方法。
您可以在堆栈上创建实例
window w;
w.borderX = [some value here];
或者在堆上创建一个
window *w = new window();
w->borderX = [some value here];
答案 1 :(得分: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;
}
我希望你很快好起来。发烧并不好笑。
答案 2 :(得分:0)
我相信你的问题是你把语句放在只能放置类型定义和变量(对象)声明的地方 - 全局范围。您不能将赋值语句放在全局范围内的语句。你必须把它放在函数体内。
您可以放在任何地方的声明/定义。
类似这样的定义:
class window{
public:
int borderX, borderY, menu_item;
};
<强>的main.cpp * 强>
// global scope
window w; // this works - this is how you declare object of type window
w.borderX = 7; // this does not work - this is statement it must be within function
int f() {
w.borderX = 7; // this works
return 0;
}