小编Hél*_*ène的帖子

具有两个参数的模板与两个模板的两个声明之间的差异,每个模板具有一个参数

接下来的两个声明之间有什么区别:

template<class T, class functor>
methodReturnType className::methodName(functor f)
Run Code Online (Sandbox Code Playgroud)

和:

template<class T>
template<class functor>
methodReturnType className::methodName(functor f)
Run Code Online (Sandbox Code Playgroud)

I was trying to write a method that would work with a functor arg. The second declaration allowed me to avoid to declare the whole class as a template of both T and functor. I wanted to have a template class className of only one parameter T, but inside that class, a method had another parameter functor, while not declaring the …

c++ templates

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

在没有字段的类中实现hashCode()和equals()

我有一个抽象类,将在Hashtable中使用:

public abstract class CEvent {

    abstract public void finished();
}
Run Code Online (Sandbox Code Playgroud)

如果没有任何字段,只有方法,如何实现hashCode()?我应该依赖hashCode的Object实现吗?

java equals hashcode

5
推荐指数
2
解决办法
1684
查看次数

我应该如何重载构造函数

我开发了像这样的QWidget构造函数:

.h文件:

public:
    LCDRange(QWidget* parent = 0);
    LCDRange(QWidget* parent = 0, const char* text = 0);
Run Code Online (Sandbox Code Playgroud)

.cpp文件:

LCDRange::LCDRange(QWidget* parent): QWidget(parent){
    init();
    std::cout << "constr 1 called" <<std::endl;
}


LCDRange::LCDRange(QWidget* parent, const char* text): QWidget(parent){
    init();
    setText(text);
    std::cout << "constr 2 called" <<std::endl;
}

    void LCDRange::init(){
//code...
}
Run Code Online (Sandbox Code Playgroud)

然后,在我的main()函数中,我调用了这样的构造函数:

LCDRange* range1 = new LCDRange(this, "Text 1");
Run Code Online (Sandbox Code Playgroud)

或者像这样:

LCDRange* range2 = new LCDRange(this);
Run Code Online (Sandbox Code Playgroud)

问题是第二个(范围2)根本不起作用.编译器抱怨:

main.cpp:26:错误:调用重载'LCDRange(MyWidget*const)'是模糊的
LCDRange*range2 = new LCDRange(this);
候选人是:
LCDRange :: LCDRange(QWidget*,const char*)
LCDRange :: LCDRange(QWidget*)
LCDRange :: LCDRange(const LCDRange&)

我不明白第三个构造函数出现在哪里...为什么它说"const": …

qt constructor overloading

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

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

为什么接下来的两个代码序列表现不同?

我不明白为什么第一个代码序列创建一个元素重叠的QWidget,而第二个代码序列行为正确.唯一的区别是,在第一个中有一个QVBoxLayout指针,而在第二个中它是一个对象.它是关于通过引用传递vs通过指针传递?我真的没有得到微妙的区别.

第一:

QVBoxLayout vbox;
vbox.setSpacing(2);

QPushButton* quitButton = new QPushButton("Qsdfsuit");
QFont fnt = quitButton->font();
fnt.setPointSize(18);
fnt.setBold(true);
fnt.setFamily("Arial");
quitButton->setFont(fnt);

connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));

QLCDNumber* lcd = new QLCDNumber(2);

QSlider* slider = new QSlider(Qt::Horizontal);
slider->setRange(0, 99);
slider->setValue(0);

connect(slider, SIGNAL(valueChanged(int)), lcd, SLOT(display(int)));

vbox.addWidget(quitButton);
vbox.addWidget(lcd);
vbox.addWidget(slider);

this->setLayout(&vbox);
Run Code Online (Sandbox Code Playgroud)

第二个:

QVBoxLayout* vbox = new QVBoxLayout();
vbox->setSpacing(2);

QPushButton* quitButton = new QPushButton("Qsdfsuit");
QFont fnt = quitButton->font();
fnt.setPointSize(18);
fnt.setBold(true);
fnt.setFamily("Arial");
quitButton->setFont(fnt);

connect(quitButton, SIGNAL(clicked()), qApp, SLOT(quit()));

QLCDNumber* lcd = new QLCDNumber(2);

QSlider* slider = new QSlider(Qt::Horizontal);
slider->setRange(0, 99);
slider->setValue(0); …
Run Code Online (Sandbox Code Playgroud)

layout qt pointers reference overlapping

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