C++非静态成员引用必须相对于特定对象
C++ nonstatic member reference must be relative to a specific object
首先,我认为查看我的代码会更有意义。标题:
#include <vector>
#include "GUIItem.h"
class WindowManager
{
private:
static WindowManager* s_wndmgr; //A singleton maintains a pointer to itself as a class variable
std::vector<GUIItem*> m_guilist; //storage for gui item
//...
public:
static void Create();
static void Destroy();
static inline WindowManager* Get()
{
return s_wndmgr;
}
static void addItem(GUIItem *newGUIItem);
};
类别:
#include "WindowManager.h"
#include "GUIButton.h"
WindowManager* WindowManager::s_wndmgr = NULL;
WindowManager::WindowManager()
{
s_wndmgr = NULL;
}
WindowManager::~WindowManager()
{
//Cleanup other stuff if necessary
delete s_wndmgr;
}
void WindowManager::Create()
{
if ( !s_wndmgr ) s_wndmgr = new WindowManager();
GUIButton *m_btn1 = new GUIButton();
addItem(m_btn1);
}
void WindowManager::Destroy()
{
if ( s_wndmgr ) delete s_wndmgr;
}
void WindowManager::addItem(GUIItem * newGUIItem)
{
m_guilist.push_back(newGUIItem);
}
希望这有点道理。我试图在OpenGL中从头开始创建一个简单的gui框架,这是一个简单窗口管理器。我的问题是m_guilist
,它应该是可访问的,这样就可以向它添加新的GUI项,就像Create
中发生的那样(GUI项是其他人继承的基类,例如GUIButton)。
在这种情况下,我使用addItem
将项目追加到列表中,但我遇到了关于addItem
内的行的a nonstatic member reference must be relative to a specific object
错误。我有点困惑为什么会这样。我知道使addItem
为静态是导致此错误的原因,但这样做是为了从Create
中调用它。有办法绕过这个吗?
对不起,这是一个很糟糕的问题,尽管我已经达到了,但我对C++的理解还不太好。对此有什么想法吗?告诉我最好不要使用Create
函数,创建另一个非静态函数来创建我的GUIItems并将它们添加到列表中。
addItem
是一个static
函数,它不对WindowManager
的任何实例进行操作。它无法访问没有实例的非静态m_guilist
。
也许你只是想要:
Get()->m_guilist.push_back(newGUIItem);
但您正在开始制作接口static
,这是一种混合。通常情况下,addItem
是非静态的,您使用WindowManager::Get()
获取的实例来调用它。
然而,WindowManager
并没有不可访问或已删除的构造函数来作为单例类。实现Singleton设计模式的方法。
相关文章:
- 如何仅使用对象名称打印特定于对象的成员
- 非静态成员引用必须相对于特定对象
- 如何在3D世界中获得对象相对于父母的绝对位置
- 不确定如何修复;非静态成员参考必须相对于特定对象
- 相对于向量对象的两个成员,找到两个向量的相交的有效方法
- 请澄清术语类静态对象(相对于类静态成员)
- C++标准库容器相对于所包含对象的线程安全性
- C++非静态成员引用必须相对于特定对象
- 无法理解错误 msg:"非静态成员引用必须相对于特定对象"
- 为什么我的 OpenGL 对象相对于最后一个绘制的对象绘制
- 新的新类对象的函数;错误:非静态成员引用必须相对于特定对象
- C++非静态成员引用必须相对于特定对象
- 我是否需要使用继承对象(相对于基对象)覆盖我的虚函数?
- lambda对象相对于函数指针转换的生命周期
- 在另一个类内部构造一个类(非静态成员引用必须相对于特定对象)
- 非静态成员引用必须相对于特定的c++对象单例类
- 错误:非静态成员引用必须相对于特定对象
- C++接口错误,非静态成员引用必须相对于特定对象
- C/C++.库相对于组合对象文件的优势
- 删除std::lock_guard相对于其他堆栈分配对象的顺序/速度