小编Vor*_*ico的帖子

如何链接Xcode 4中的库?

我是Apple的Xcode的完全初学者,但我已经遵循Xcode文档和一些相关问题的建议而没有成功.

我将GMP安装到/ usr/local/bin,使用该库编写了一个简短的程序,并使用gcc main.c -lgmp.它编译时没有任何警告或错误,并且可执行文件完美无缺.

我启动了一个新的Xcode项目(命令行工具;类型:C),将代码复制到新创建的main.c,并打开项目构建设置.从那里,我设置链接>其他链接器标记-lgmp搜索路径>库搜索路径/usr/local/bin.但是,构建失败,预处理程序错误"Gmp.h:没有这样的文件或目录".

我已经尝试了几乎所有可以想象的标题:

#include "gmp.h"

#include <gmp.h>

#include "gmp"

#include "libgmp.a"...

这是我过去三个月的主要障碍,这使我无法学习C.任何有助于我最终解决方案的帮助将不胜感激.

c xcode gmp xcode4

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

在AngelScript中注册一个C++类并传递一个类实例

我无法按照正确的方式遵循AngelScript手册来注册类对象并将类的特定实例传递给脚本.假设我有一个C++类Circle,我想让他知道AngelScript.

class Circle
{
public:
    int getArea();

    int radius;
};
Run Code Online (Sandbox Code Playgroud)

从这里开始,我想创建一个Circle类的实例,将getArea()方法注册到AngelScript引擎(或者如果可能的话,自动注册类中的所有方法),并将类实例本身传递给AngelScript环境.

Circle circleInstance;
circleInstance.radius = 10;

// Initialize AngelScript engine

asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);

engine->RegisterObjectMethod("Circle", "int getArea()",
    asMETHOD(Circle, getArea), asCALL_THISCALL);
Run Code Online (Sandbox Code Playgroud)

在AngelScript中,我希望能够从实例变量中调用该方法并返回C++函数的结果.

circleInstance.getArea();
Run Code Online (Sandbox Code Playgroud)

但是,在上面的代码中,我显然没有circleInstance以任何方式将实例传递给AngelScript引擎,因此脚本环境不知道它的存在.我假设我忽略了一些东西,答案只有一两行C++.如果我注册Circle过等的方法类RegisterObjectType或者RegisterInterface,我需要让Circle继承asIScriptObject这个工作?任何见解都表示赞赏!

c++ scripting class instance

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

使用 MinGW 编译为带有一些未定义引用的 .dll

我听说所有 Windows .DLL 都必须包含它引用的每个符号的定义,因此像这样的 .DLL 文件永远不会编译,因为它没有实现bar().

void bar();

__declspec(dllexport)
void foo() {
    bar();
}
Run Code Online (Sandbox Code Playgroud)

我认为类比是 .DLL 本质上是具有不同入口点的可执行文件,因此它们必须定义所有引用,就像可执行文件一样。

但在 Unix 环境中,我可以毫无问题地将其编译为 .so 文件。然后,我可以dlopen(path, RTLD_NOW | RTLD_GLOBAL);从主机应用程序中使用来加载库并将主机的符号与库的符号合并。如果主机定义了bar(),则库将简单地调用该函数。

我不能将所有内容重新定义到 .DLL 文件中,因为在我的应用程序中,库使用了来自主机的数千个符号。使用 MinGW 或可能的 Visual C++,是否真的没有办法通过在 .DLL 中保留未定义的符号并在加载时合并它来使用来自主机的符号?我也不想在 .DLL 中设置数千个回调函数,因为这对于 C++ 方法来说很困难。

c++ windows dll mingw

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

我的PHP类变量发生了什么?

我制作了这个包含愚蠢的简单PHP文件

<?php

class stuff {
    private $var;
}

?>
Run Code Online (Sandbox Code Playgroud)

并在运行时导致此错误:

解析错误:语法错误,意外T_STRING,期待T_OLD_FUNCTION或T_FUNCTION或T_VAR或'}'...在第4

为了使事情更加混乱,它通常在具有相同主机的不同域上运行.当然,文件夹和域与是否可以定义类属性无关.这里发生了什么??

php

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

使用CMake将`src`目录中的源编译为`bin`目录中的二进制文件

我的项目目录在其根目录中包含一个CMakeLists.txt文件srcinclude目录.src也包含它自己的CMakeLists.txt,由根目录链接.有没有一种方法可以指定CMake设置默认的全局构建目录,以便语法src/CMakeLists.txt接近以下内容?

include_directories(include)
add_executable(first main.cpp foo.cpp)
add_executable(second bar.cpp)
Run Code Online (Sandbox Code Playgroud)

我想要构建这个目录树:

CMakeLists.txt

src/
    CMakeLists.txt
    main.cpp
    foo.cpp
    bar.cpp

include/
    ...

bin/ (or build/)
    first
    second
Run Code Online (Sandbox Code Playgroud)

cmake

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

C++容器,在被破坏时自动删除元素

我想在C++中创建一个列表或引用映射,它们会在销毁时自动删除它们的元素.这是一个展示这个想法的结构.

class Foo;

class Bar
{
    Foo foo;
};

void main(void)
{
    std::vector<Foo> foos;

    {
        Bar bar;
        foos.push_back(bar.foo);

        // foos[0] should be the same reference as bar.foo
    }

    // bar is now destructed
    // foos.size() should be 0
}
Run Code Online (Sandbox Code Playgroud)

我的代码有两个问题.当push_back()使用std :: vector调用它时,它会创建Foo对象的副本.这是不可接受的,因为要素foos应反映所做的任何改变bar.foo.其次,即使foos向量可以存储引用,在离开bar创建的范围之后,也不会从列表中删除Foo对象.理想情况下,我希望Foo引用foos在其销毁时被删除.

在我实现自己的解决方案之前,我想知道任何提供此解决方案的第三方库(Boost,可能?),或者我应该使用的任何适当的技术或策略.谢谢!

c++ destructor reference list

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

对另一个表中的列使用 WHERE 子句

我有这个架构。

create table "user" (id serial primary key, name text unique);
create table document (owner integer references "user", ...);
Run Code Online (Sandbox Code Playgroud)

我想选择名为“vortico”的用户拥有的所有文档。我可以在一个查询中完成它吗?以下似乎不起作用。

select * from document where owner.name = 'vortico';
Run Code Online (Sandbox Code Playgroud)

sql postgresql

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

boost :: mem_fn的正确类型是什么?

我能在C++中实现以下功能吗?我想保持myInstance变量未指定,直到调用回调方法,而不是在boost::bind实例中包含它.

MyClass *myInstance;

void call(/* boost::mem_fn */ callback)
{
    // Somewhere in this function, the operator()() method
    // is called on the callback instance

    callback(myInstance);
}

call(boost::mem_fn(&MyClass::myMethod));
Run Code Online (Sandbox Code Playgroud)

我理解这boost::mem_fn是一个返回特定对象的函数,但我不确定它的类型.文档说明未指定为其返回类型.其中一个boost::bind构造函数将此类型作为参数,但我无法在其实现中找到实际的声明.另外,我甚至允许存储我自己的这种特殊类型的实例,还是仅限于使用boost函数?

c++ boost

0
推荐指数
1
解决办法
861
查看次数

标签 统计

c++ ×4

boost ×1

c ×1

class ×1

cmake ×1

destructor ×1

dll ×1

gmp ×1

instance ×1

list ×1

mingw ×1

php ×1

postgresql ×1

reference ×1

scripting ×1

sql ×1

windows ×1

xcode ×1

xcode4 ×1