小编App*_*ell的帖子

不能将enum类用作unordered_map键

我有一个包含枚举类的类.

class Shader {
public:
    enum class Type {
        Vertex   = GL_VERTEX_SHADER,
        Geometry = GL_GEOMETRY_SHADER,
        Fragment = GL_FRAGMENT_SHADER
    };
    //...
Run Code Online (Sandbox Code Playgroud)

然后,当我在另一个类中实现以下代码时......

std::unordered_map<Shader::Type, Shader> shaders;
Run Code Online (Sandbox Code Playgroud)

...我收到编译错误.

...usr/lib/c++/v1/type_traits:770:38: 
Implicit instantiation of undefined template 'std::__1::hash<Shader::Type>'
Run Code Online (Sandbox Code Playgroud)

导致错误的原因是什么?

c++ enums map c++11 enum-class

71
推荐指数
6
解决办法
4万
查看次数

如何初始化标头中的静态成员

给定是一个具有静态成员的类.

class BaseClass
{
public:
    static std::string bstring;
};
Run Code Online (Sandbox Code Playgroud)

字符串显然是在类之外进行默认初始化.

std::string BaseClass::bstring {"."};
Run Code Online (Sandbox Code Playgroud)

如果我在标题中包含上面的行以及类,我会收到symbol multiply defined错误.它必须在单独的cpp文件中定义,即使使用include guardspragma once.

有没有办法在标题中定义它?

c++ class static-members

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

如何在ruby中调用C++函数

我是一位经验丰富的C/C++开发人员,但我是Ruby的新手.

如何在Ruby中调用C++函数?

c++ ruby

32
推荐指数
3
解决办法
2万
查看次数

luaL_openlib替换Lua 5.2

我正在调整为Lua <5.2编写的库,并接到一个我不知道相当于的电话:

luaL_openlib(L, "Polycore", polycoreLib, 0);
Run Code Online (Sandbox Code Playgroud)

哪里polycoreLib

static const struct luaL_Reg polycoreLib []
Run Code Online (Sandbox Code Playgroud)

如何将呼叫替换为luaL_openlib

lua wiki只:

luaL_openlib(L, name, lreg, x);应该仔细重写这样的调用,因为将搜索并可能创建具有给定名称的全局表.

c lua embedding lua-5.2

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

使用派生类的类型覆盖函数参数类型

我打算用一个接受自己类型参数的方法创建一个接口(而不是c ++中的虚拟基类).

class Base {
public:
    virtual void seriousMethod(const Base &arg) = 0;
}
Run Code Online (Sandbox Code Playgroud)

但是,派生类不应该是基类类型的参数,而是派生类类型的参数.

class Derived: public Base {
public:
    virtual void seriousMethod(const Derived &arg) { /* ... */ }
}
Run Code Online (Sandbox Code Playgroud)

我怎么会意识到这一点?我是否必须模拟基类(例如Base<Derived>)或是否有更清洁的解决方案?

c++

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

___sincos_stret链接时未定义的符号

就像前文提到这里,___sincos_stret编译使用使用Xcode5命令行工具,这个符号项目时无法找到.

在上面提到的线程中,为IOS目标发布了一个解决方案(传递-miphoneos-version-min=5.0给编译器),是否有针对desktop(x64)目标的解决方案?

例如,当我尝试编译polycode时,它就会发生.

编辑2:

奇怪的是,在手动编译上一个错误中引用的库之后,错误现在恰好位于lto.o中,这是一个内部llvm头本身...

undef: ___sincos_stret
Undefined symbols for architecture x86_64:
  "___sincos_stret", referenced from:
      _mdct_init in lto.o
      _dradfg in lto.o
Run Code Online (Sandbox Code Playgroud)

我正在使用Xcode 5运行OSX 10.9 DP.这是链接步骤.

c++ macos xcode xcode5

14
推荐指数
3
解决办法
9541
查看次数

libGDX项目无法加载库liblwjgl.dylib

运行桌面项目时,新的libGDX项目无法加载库liblwjgl.dylib.

Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library: 
/var/folders/4l/nsj9j4xj51g8h_6y_ndpnmc80000gn/T/libgdxChristian/3741154320/liblwjgl.dylib
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1798)
    at java.lang.Runtime.load0(Runtime.java:809)
    at java.lang.System.load(System.java:1080)
    at org.lwjgl.Sys$1.run(Sys.java:70)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
    at org.lwjgl.Sys.loadLibrary(Sys.java:95)
    at org.lwjgl.Sys.<clinit>(Sys.java:112)
    at org.lwjgl.openal.AL.<clinit>(AL.java:59)
    at com.badlogic.gdx.backends.openal.OpenALAudio.<init>(OpenALAudio.java:70)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.<init>(LwjglApplication.java:80)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.<init>(LwjglApplication.java:64)
    at com.foxhat.test.Main.main(Main.java:14)
Run Code Online (Sandbox Code Playgroud)

更新:

Java 1.8在OSX 10.9上运行.同样的错误不仅出现在自己的项目中,还出现在使用libGDX构建的外部JAR中.

错误中提到的文件夹,在哪里liblwjgl.dylib搜索,包含:

liblwjgl.jnilib
openal.dylib
Run Code Online (Sandbox Code Playgroud)

重命名liblwjgl.jnilib.dylib 工作的外国申请,而不是我自己.

java macos libgdx

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

编译llvm/clang时发生致命错误 - 找不到'cstddef'文件

当试图编译llvm/clang时

../llvm/configure --enable-cxx11=yes --enable-libcpp=yes 
  --enable-optimized=yes --prefix=/usr/local --enable-targets=all 
  --with-gcc-toolchain=/usr/local/bin --enable-bindings=auto 
Run Code Online (Sandbox Code Playgroud)

发生以下错误:

[...]llvm/include/llvm/Support/AlignOf.h:19:10: fatal error: 'cstddef' file not found
#include <cstddef>
         ^
1 error generated.
rm: [...]/llvm_build/lib/Support/Release+Asserts/APFloat.d.tmp: No such file or directory
make[1]: *** [[...]/llvm_build/lib/Support/Release+Asserts/APFloat.o] Error 1
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)

cstddef确实存在(in /usr/local/include/c++/4.8.0/).添加--includedir=/usr/local/include/c++/4.8.0/到配置也没有帮助.

这可能是什么原因?

c++ macos clang

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

如何处理回调注册

我想实现一个回调处理程序.方法应该像以下一样简单注册......

std::multimap<Event::Type, std::function<void()>> actions;

void EventManager::registerAction(Event::Type event, std::function<void()> action) {
    actions.insert(std::make_pair(event, action));
}
Run Code Online (Sandbox Code Playgroud)

......确实按预期工作.

但这种方法的问题是,取消注册回调是不可能的......

void EventManager::deregisterAction(Event::Type event, std::function<void()> action) {
    for(auto i = actions.lower_bound(event); i != actions.upper_bound(event); ++i) {
        // if action == i->second
    }
}
Run Code Online (Sandbox Code Playgroud)

...因为无法比较绑定函数.

延迟取消注册也不起作用,因为无法验证函数对象.

void EventManager::handle(Event::Type event) {
    for(auto i = actions.lower_bound(event); i != actions.upper_bound(event); ++i) {
        if(i->second) // returns true even if the object doesn't exist anymore
            i->second();
    }
}
Run Code Online (Sandbox Code Playgroud)

那么我应该如何处理这样的实现,如何避免遇到的问题呢?

c++ function-pointers callback c++11

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

如何将可拆卸区域(QDockWidget)添加到QML应用程序

如何将可拆卸区域添加到QML ApplicationWindow?

以下面的应用程序(Tiled)为例.它有多个可拆卸区域.在第一张图像中,所有区域都附着,而在第二张图像中,区域正在分离/重新连接:

在此输入图像描述

从C++开始,这可以用QDockWidget实现(参见这个问题).但是QML有解决方案吗?

c++ qt qml qt-quick qt5

10
推荐指数
2
解决办法
2079
查看次数

标签 统计

c++ ×8

macos ×3

c++11 ×2

c ×1

callback ×1

clang ×1

class ×1

embedding ×1

enum-class ×1

enums ×1

function-pointers ×1

java ×1

libgdx ×1

lua ×1

lua-5.2 ×1

map ×1

qml ×1

qt ×1

qt-quick ×1

qt5 ×1

ruby ×1

static-members ×1

xcode ×1

xcode5 ×1