小编dtr*_*uby的帖子

连接Qt 5中的过载信号和插槽

我在Qt 5中无法掌握新的信号/槽语法(使用指向成员函数的指针),如新信号槽语法中所述.我尝试改变这个:

QObject::connect(spinBox, SIGNAL(valueChanged(int)),
                 slider, SLOT(setValue(int));
Run Code Online (Sandbox Code Playgroud)

对此:

QObject::connect(spinBox, &QSpinBox::valueChanged,
                 slider, &QSlider::setValue);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试编译它时出错:

错误:没有匹配的函数用于调用 QObject::connect(QSpinBox*&, <unresolved overloaded function type>, QSlider*&, void (QAbstractSlider::*)(int))

我曾经尝试过在Linux上使用clang和gcc -std=c++11.

我做错了什么,我该如何解决?

c++ qt qt5

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

G ++,clang ++和std :: function

我刚刚在C++ 11中使用了新的std :: function,我编写了一个用clang ++ 3.2和Intel C++编译器13.1编译但不用g ++ 4.8编译的例子.在我将此报告为错误之前,我想我会检查我是不是做了一些非常愚蠢的事情,而且这应该实际编译.那么,以下代码是否有效c ++ 11?

template <typename C>
void map(C& c, std::function<typename C::value_type(typename C::value_type)> f)
{
    for(auto& x : c) {
        x = f(x);
    }
}

int main()
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    map(v, [](int x) { return x+2; });

    for(auto x : v) {
        std::cout << x << std::endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我意识到这段代码并不是很有用,但令我感到奇怪的是clang和Intel C++编译它并且gcc没有.

编辑:当传递map函子或函数指针时,gcc也不会编译相同的代码:

struct {
    int operator() (int a) {
        return a+2;
    }
} add2s;
map(v, add2s);

int add2 (int a) …
Run Code Online (Sandbox Code Playgroud)

c++ g++ c++11 clang++

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

标签 统计

c++ ×2

c++11 ×1

clang++ ×1

g++ ×1

qt ×1

qt5 ×1