我一直在研究一个项目,我发现静态关键字有时候会变得一团糟。
我的项目使用库ncurses。我想要做的是获得我的屏幕高度,然后打印它。一旦我的屏幕初始化,静态类(屏幕)应始终具有相同的高度和宽度。
以下是我一直在努力做的一个例子:
class.hpp:
#ifndef CLASS_H
#define CLASS_H
#include <iostream>
#include "screen.hpp"
class Class{
public:
Class(){
std::cout << "Class: " << std::endl;
}
virtual ~Class(){}
};
#endif //CLASS_H
screen.hpp:
#ifndef SCREEN_H
#define SCREEN_H
#include <curses.h>
#include <signal.h>
#include <curses.h>
class Screen{
public:
Screen();
virtual ~Screen();
void Init();
void Close();
int getW() const;
int getH() const;
private:
int w, h;
};
static Screen screen;
#endif // SCREEN_H
main.cpp:
#include <iostream>
#include "screen.hpp"
#include "class.cpp"
int main(int argc, char** argv){
screen.Init();
screen.Close(); //I just wanted to set my H and W in screen
std::cout << "main: " << screen.getH() << std::endl;
Class classa(); //Will print the screen H in the constructor
return 0;
}
这就是结果:
iDentity:~$ g++ -Wall -g main.cpp screen.cpp class.cpp -lncurses
iDentity:~$ ./a.out
main: 24
Class: 0
iDentity:~$
有什么东西我不懂静电吗?我应该创建一个接口文件(带有命名空间接口)吗?请帮帮我。
感谢。
答案 0 :(得分:2)
Class classa(); //Will print the screen H in the constructor
不能打印任何内容,因为它不会声明变量,因此不会调用构造函数。 声明函数classa
,它不带参数,并返回Class
。
对于static
,我在引用的代码中看不到任何静态内容。
答案 1 :(得分:0)
您可以使用
获得所需的效果static int w, h;
但你似乎还有更多的想法。您是否希望一次允许存在多个Screen
?您是否希望Class
旁边的其他课程(不致电您的班级Class
)才能访问Screen
?这可能是Singleton模式或嵌套类的工作。
答案 2 :(得分:0)
没有&#34;静态类。&#34;
你可以拥有一个类的静态实例......
class Foo
{
};
static Foo my_foo_;
或者您可以在班级中使用静态方法......
class Foo
{
public:
static void Bar() {};
};
int main()
{
Foo::Bar();
}
后者是我怀疑你真正想要的。
请注意,为了获得此功能,您实际上必须使用关键字static
,这是您在发布的示例中永远不会做的。