小编sar*_*sjo的帖子

错误:请求'..'中的成员'..',这是非类型的

我有一个带有两个构造函数的类,一个不带参数,另一个带一个参数.

使用带有一个参数的构造函数创建对象可以按预期工作.但是,如果我使用不带参数的构造函数创建对象,我会收到错误.

例如,如果我编译此代码(使用g ++ 4.0.1)...

class Foo
{
  public:
    Foo() {};
    Foo(int a) {};
    void bar() {};
};

int main()
{
  // this works...
  Foo foo1(1);
  foo1.bar();

  // this does not...
  Foo foo2();
  foo2.bar();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

...我收到以下错误:

nonclass.cpp: In function ‘int main(int, const char**)’:
nonclass.cpp:17: error: request for member ‘bar’ in ‘foo2’, which is of non-class type ‘Foo ()()’
Run Code Online (Sandbox Code Playgroud)

为什么这样,我如何使它工作?

c++

411
推荐指数
5
解决办法
41万
查看次数

不完全是.使用Cocoa在游戏中处理键盘输入的正确方法是什么?

假设您正在为Mac OS X创建游戏.事实上,假设您正在创建Quake,只有2011年,您更愿意只使用现代的,不推荐使用的框架.

当用户按下(或释放)键盘上的任何键时,您希望通知您的游戏.这包括修改键,如移位和控制.编辑添加:此外,您想知道是否按下了修改键的左侧或右侧版本.

您还希望您的游戏具有配置屏幕,用户可以在其中检查和修改键盘配置.它应包含以下内容:

  • 前进:W
  • 跳跃:空间
  • 消防:LCTRL

你是做什么?我一直试图找到一个好的答案,但现在已经有一天了,但还没有成功.

这就是我想出的:

  • 子类NSResponder,实现keyUp:和keyDown:,就像在这个答案中一样.这种方法的一个问题是,当用户只按下修饰键时,不会调用keyUp:和keyDown :. 要解决这个问题,你可以实现flagsChanged:,但这感觉就像一个黑客.
  • 使用石英事件点击.这仅在应用程序以root身份运行或用户已启用辅助设备访问权限时才有效.此外,修饰键事件仍不计为常规键事件.
  • 使用HIToolbox.在10.6开发人员文档中几乎没有提及它.它似乎非常非常弃用.

那么,这样做的正确方法是什么?这真的感觉就像一个应该有一个众所周知的,记录良好的解决方案的问题.这不像游戏是非常小众的.

macos cocoa

17
推荐指数
1
解决办法
2719
查看次数

为什么我需要在move-constructor的初始化列表中使用std :: move?

假设我有一个(普通的)类,它是可移动构造和可移动分配但不可复制构造或可复制分配:

class movable
{
  public:
    explicit movable(int) {}
    movable(movable&&) {}
    movable& operator=(movable&&) { return *this; }
    movable(const movable&) = delete;
    movable& operator=(const movable&) = delete;
};
Run Code Online (Sandbox Code Playgroud)

这很好用:

movable m1(movable(17));
Run Code Online (Sandbox Code Playgroud)

当然,这不起作用,因为m1它不是右值:

movable m2(m1);
Run Code Online (Sandbox Code Playgroud)

但是,我可以包m1std::move,它投射到一个右值引用,以使其工作:

movable m2(std::move(m1));
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在,假设我有一个(同样微不足道的)容器类,它包含一个值:

template <typename T>
class container
{
  public:
    explicit container(T&& value) : value_(value) {}
  private:
    T value_;
};
Run Code Online (Sandbox Code Playgroud)

但是,这不起作用:

container<movable> c(movable(17));
Run Code Online (Sandbox Code Playgroud)

编译器(我试过clang 4.0和g ++ 4.7.2)抱怨我正在尝试movablecontainer初始化列表中使用已删除的复制构造函数.同样,包裹valuestd::move使得它的工作:

    explicit container(T&& value) : value_(std::move(value)) {} …
Run Code Online (Sandbox Code Playgroud)

c++ rvalue-reference move-constructor move-semantics c++11

14
推荐指数
2
解决办法
2600
查看次数

Mac OS X 是否有未弃用的光栅图形框架?

我正在寻找适用于 Mac OS X 的光栅图形框架。具体来说,我想要某种可以像像素矩阵一样操作(至少在概念上)的视图。我的程序将以编程方式生成像素数据。

QuickDraw 非常适合该描述,但已被弃用。据我所知,Core Graphics 中没有类似的东西。我错过了什么吗?

一个普通的 C 框架比 Objective-C 框架更好,但我并不太挑剔。

c macos core-graphics objective-c quickdraw

3
推荐指数
1
解决办法
684
查看次数