接下来的两个声明之间有什么区别:
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 …
我有一个抽象类,将在Hashtable中使用:
public abstract class CEvent {
abstract public void finished();
}
Run Code Online (Sandbox Code Playgroud)
如果没有任何字段,只有方法,如何实现hashCode()?我应该依赖hashCode的Object实现吗?
我开发了像这样的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": …
我不明白为什么第一个代码序列创建一个元素重叠的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) qt ×2
c++ ×1
constructor ×1
equals ×1
hashcode ×1
ios ×1
java ×1
layout ×1
nslog ×1
overlapping ×1
overloading ×1
pointers ×1
reference ×1
templates ×1