小编Eti*_*tel的帖子

Mac OS X上的Boost.Python:"TypeError:属性名称必须是字符串"

我最近使用MacPorts安装了Boost,意图在C++中进行一些Python嵌入.然后,我决定使用Python网站上的示例检查我是否正确配置了Xcode:

#include <boost/python.hpp>

using namespace boost::python;

int main( int argc, char ** argv ) 
{
    try 
    {
        Py_Initialize();

        object main_module(handle<>(borrowed(PyImport_AddModule("__main__"))));

        object main_namespace = main_module.attr("__dict__");

        handle<> ignored(PyRun_String("print \"Hello, World\"",
                                      Py_file_input,
                                      main_namespace.ptr(),
                                      main_namespace.ptr()));
    } 
    catch( error_already_set ) 
    {
        PyErr_Print();
    }
}
Run Code Online (Sandbox Code Playgroud)

它正确编译,但是当我启动它时,对attr()的调用会抛出异常,并且生成的错误消息是"TypeError:属性名称必须是字符串,而不是'str'".哪个可疑听起来像一个占位符.

我在Google上查了一下,但没有运气.

我在Leopard上使用Boost v1.39,Python 2.5和GCC 4.0.

c++ python boost-python

7
推荐指数
1
解决办法
816
查看次数

QGraphicsView和自定义游标

我正在尝试为我的QGraphicsView使用自定义游标和预设游标的混合.在我的实现中,我们为视图创建了"模式"的概念.这意味着根据用户所处的"模式",左键单击或左键单击拖动会发生不同的事情.无论如何,这不是问题,只是上下文.

当我尝试更改每个模式的光标时出现问题.例如,对于模式1,我们想要显示常规箭头光标,但对于模式2,我们想要使用自定义像素图.graphicsview->viewport()->setCursor(Qt::QArrowCursor)  我们在切换到模式1和graphicsview->viewport()->setCursor(our custom cursor)模式2 时看起来很简单.除了它根本不起作用.

首先,光标不会更改为自定义光标.这是第一个问题.但是,如果通过另一个操作,图形视图的拖动模式设置为ScrollHandDrag,则一旦拖动操作完成,光标将切换到自定义光标.奇怪的.但情节变浓了......一旦我们切换到自定义光标,无论我们调用多少次,它都永远不会变回ArrorCursor setCursor(Qt::QArrowCursor).我是否在视口或图形视图本身上调用setCursor似乎并不重要.

所以,为了好玩,我graphicsview->unsetCursor()在我们想要更改光标之前添加了一个调用,这至少可以解决第二个问题.只要我们在它们之间做一点HandDragging,光标就会变好.更好,但肯定不是最佳的.但是应该注意,在视口上执行unsetCursor不起作用.它绝对必须在graphicsview上完成 - 无论我们是否在视口上设置光标.

为了完全修补问题,我在设置光标后添加了这两行:

graphicsview->setDragMode(QGraphicsView::ScrollHandDrag);
graphicsview->setDragMode(QGraphicsView::NoDrag);
Run Code Online (Sandbox Code Playgroud)

哪个有效,但你们加油!所以在这两个方法中发生了一些神奇的事情来修复问题,但是看了一下我看不到的代码.与拖动模式正在改变我想象的光标这一事实有关.

为了完整起见,我还应该提到触发模式更改的事情是使用已添加到场景中的QPushButton QGraphicsScene->addWidget().我不知道这与它有什么关系,但你永远不知道.

我希望有人能澄清为什么我需要做这些看似随机的电话.我不认为我在任何地方做错了什么.在此先感谢您的帮助.

编辑:这是一个实际的代码示例,其中包含如上所述的光标补丁.您可以从以下链接查看和/或下载它们.粘贴这里有点长.我包含了游标更改的框架,因为我有一种有趣的感觉,这在某种程度上很重要.

https://gist.github.com/712654

问题所在的代码是从第104行开始的MyGraphicsView.cpp.这是在图形视图中设置光标的位置.完全如上所述.

请记住,游标可以使用非常难看的补丁 - 或多或少.没有这些线条,您将非常清楚地看到上面帖子中列出的问题.

链接中还包含使用视图等的mainWindow的所有代码...唯一缺少的是我正在使用的图像.但是图像本身并不重要,任何16x16 png都可以.

c++ qt qt4

7
推荐指数
1
解决办法
3406
查看次数

打开包写入时出现奇怪错误

首先,我使用的是.NET 4.

我正在尝试将一些文件写入包中,当我这样做时,我遇到了一些奇怪的事情:

using (var package = Package.Open(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
    // do something with package
}
Run Code Online (Sandbox Code Playgroud)

Package是指System.IO.Packaging.Package.

奇怪的是,Package.Open方法抛出一个异常,说:

当访问是FileAccess.Read时,无法使用FileMode.Create,FileMode.CreateNew,FileMode.Truncate,FileMode.Append获取流.

我在2009年的Microsoft Connect上发现了一个旧的错误报告:http: //connect.microsoft.com/VisualStudio/feedback/details/392318/argumentexception-text-is-wrong

但它没有帮助.

那么,有人有个主意吗?

.net c# package

7
推荐指数
1
解决办法
5091
查看次数

在哪里存储节目注册信息

我在VB.Net中创建了一个30天试用期的程序.该程序在注册表中节省了首次启动该程序的时间,并且最后使用了该时间.由此我计算试验是否仍然有效.

问题是,非管理员用户可以访问的注册表中唯一的位置是HKEY_LOCAL_USER键.我需要为所有用户实施试用,否则用户可以使用新帐户并重置试用版.

我在哪里可以保存此信息,以便没有管理员权限的用户可以从该位置读取和写入?我还想将它保存在普通用户无法轻易找到的位置,并删除将重置试用版的文件.

谢谢

.net registry

5
推荐指数
1
解决办法
455
查看次数

Essential COM中的BASE_OFFSET宏

我正在阅读Essential COM并在本书的第2章遇到了一个宏'BASE_OFFSET',我并不真正理解它的语法或为什么这样做.

#define BASE_OFFSET(ClassName, BaseName) \
(DWORD_PTR(static_cast<BaseName*>(reinterpret_cast<ClassName*>(0x10000000))) - 0x10000000)
Run Code Online (Sandbox Code Playgroud)

谁能解释这个宏以及我们如何使用它?事实上,这本书使用了这个宏,但由于我不太了解它,我没有看到它的实际用法.非常感谢你提前.

c++ com macros

5
推荐指数
1
解决办法
101
查看次数

这个平面射线相交代码正确吗?

我的 Plane 类有两个字段:

public Vector3 Norm; //normal vector 
public double Offset; //signed distance to origin
Run Code Online (Sandbox Code Playgroud)

这是我用于交集的代码,不知道是否正确。我仔细检查了我的方程和所有内容,但我想从对此更有经验的人那里得到反馈。

public override Intersection Intersect(Ray ray)
{
    // Create Intersection.
    Intersection result = new Intersection();

    // Find t.
    double t = - (Vector3.Dot(Norm,ray.Start) + Offset) / (Vector3.Dot(Norm, ray.Dir));
    if (t < 0) // the ray does not hit the surface, that is, the surface is "behind" the ray
        return null;

    // Get a point on the plane.
    Vector3 p = ray.Start + t * ray.Dir; …
Run Code Online (Sandbox Code Playgroud)

raytracing game-physics

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

如果在构造函数中抛出异常,是否会自动删除为对象分配的内存?

假设有这样的代码:

class CFoo
{
public:
    CFoo()
    {
        iBar = new CBar();
    }
private:
    CBar* iBar;
};

....
CFoo* foo = new CFoo();
Run Code Online (Sandbox Code Playgroud)

执行上面的行时,将分配第一个内存来保存CFoo对象.但是如果新的CBar()行引发异常(由于内存不足),系统会自动解除分配先前分配给CFoo对象的内存吗?我认为它必须,但找不到任何明确的参考说明.如果没有,编码器将如何释放内存,因为它不会被分配给foo?

c++

4
推荐指数
1
解决办法
887
查看次数

使用双指针进行动态分配

我有一个基类玩具和派生类Toy_remote_car和Toy_battery_car.

我这样做:

Toy** ptr;
ptr=new Toy*;
ptr[0]=new Toy_remote_car[1];
ptr[1]=new Toy_battery_car[1];/*this is completely wrong according to my teacher because i never created ptr[1]. Instead this is a misuse of memory according to him.*/
Run Code Online (Sandbox Code Playgroud)

上面的代码(ptr = new Toy*)正在创建一个类型为Toy(ptr [0])的指针,它包含派生类Toy_remote_car的对象.

现在我想写这样的代码:

- >不应预定义玩具类型指针的数量.

- >而我会调用add_toy函数,它会创建一个指向我想要的对象类型的ptr.此外,如果我再次调用add_toy函数,它不应该将数据分配给previos ptr,但它应该创建一个新的ptr.以下约定可能有所帮助:

ptr[0]=new Toy_remote_car[1];
/*we want to add more toys so add_toy function called. A check is applied.*/
/*The check checks that ptr[0] already contains a value so it creates another pointer ptr[1]*/
ptr[1]=new Toy_battery_car[1];
Run Code Online (Sandbox Code Playgroud)

- >此外,我将能够访问所有以前的数据.简而言之:

ptr[0]//contains one …
Run Code Online (Sandbox Code Playgroud)

c++ pointers memory-leaks memory-management new-operator

4
推荐指数
1
解决办法
2万
查看次数

模板基类初始化

在visual c ++中接受下面的代码,g ++将生成错误:"类Derived没有任何字段名Base",它遵循标准?

template <class T>
class Base
{
public:
    Base(){};
};

template <class T>
class Derived:public Base<T>
{
public:
    Derived():Base(){}
};
Run Code Online (Sandbox Code Playgroud)

顺便说一句:都接受

Derived():Base<T>(){}
Run Code Online (Sandbox Code Playgroud)

所以,我会跟着gcc

c++ gcc templates initialization

4
推荐指数
1
解决办法
794
查看次数

C / C ++-Mac OS X-检查文件是否存在

检查文件是否存在,不创建文件并通过使用Mac库<.mach-o / dyld.h>或其他文件写入信息的最佳方法是什么?

c c++ macos

4
推荐指数
1
解决办法
4768
查看次数