我在C++中遇到了可选函数参数的问题
我要做的是编写带有可选参数的函数,该函数通过引用传递,这样我就可以用两种方式(1)和(2),但是(2)我真的不在乎什么是的价值mFoobar
.
我试过这样的代码:
void foo(double &bar, double &foobar = NULL)
{
bar = 100;
foobar = 150;
}
int main()
{
double mBar(0),mFoobar(0);
foo(mBar,mFoobar); // (1)
cout << mBar << mFoobar;
mBar = 0;
mFoobar = 0;
foo(mBar); // (2)
cout << mBar << mFoobar;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它崩溃了
void foo(double &bar, double &foobar = NULL)
Run Code Online (Sandbox Code Playgroud)
有消息:
error: default argument for 'double& foobar' has type 'int'
Run Code Online (Sandbox Code Playgroud)
没有函数重载可以解决它吗?
我在使用C++函数指针时遇到问题.这是我的例子:
#include <iostream>
using namespace std;
class bar
{
public:
void (*funcP)();
};
class foo
{
public:
bar myBar;
void hello(){cout << "hello" << endl;};
};
void byebye()
{
cout << "bye" << endl;
}
int main()
{
foo testFoo;
testFoo.myBar.funcP = &byebye; //OK
testFoo.myBar.funcP = &testFoo.hello; //ERROR
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Compilator在testFoo.myBar.funcP = &testFoo.hello;
以下位置返回错误:
ISO C++禁止获取绑定成员函数的地址以形成指向成员函数的指针.说'&foo :: hello'
无法在赋值时将'void(foo :: )()'转换为'void()()'
所以我试着这样:
class bar
{
public:
void (*foo::funcP)();
};
Run Code Online (Sandbox Code Playgroud)
但是现在编译器增加了一个:
'foo'尚未宣布
有没有办法让它发挥作用?
提前感谢您的建议
我想知道是否可以将主程序中的方法添加到头文件中定义的现有类中.例如:class CFun
在文件中定义了CFun.hpp
,但在我们中party.cpp
我们想要添加一个方法void hello() {cout << "hello" << endl;};
而不进行编辑CFun.hpp
显然(不幸的是)建筑:
#include "CFun.hpp"
class CFun
{
public:
void hello() {cout << "hello" << endl;};
};
Run Code Online (Sandbox Code Playgroud)
不起作用返回错误 Multiple declaration for 'CFun'
是否可以在没有类继承的情况下使其工作?
我在使用时遇到了一些问题,QThreads
这让我在找到合适的组合之前探索了不同的组合.但是,当涉及事件循环和信号槽处理时,我仍然不完全理解下面显示的四种情况中发生的事情.
我在OUTPUT部分添加了一些注释,但正如您所看到的,我不确定我对观察到的行为的原因是否正确.此外,我不确定是否case 3
可以在实际代码中使用.这是我的测试代码(main.cpp
每种情况只有不同):
worker.h:
#include <QObject>
#include <QDebug>
#include <QThread>
class Worker : public QObject
{
Q_OBJECT
public:
explicit Worker(QObject *parent = 0) { this->isRunning_ = false;}
bool isRunning() const { return isRunning_; }
signals:
void processingFinished();
void inProgress();
public slots:
void process()
{
this->isRunning_ = true;
qDebug() << this << "processing started";
for (int i = 0; i < 5; i++)
{
QThread::usleep(1000);
emit this->inProgress();
}
qDebug() << this << "processing finished";
this->isRunning_ …
Run Code Online (Sandbox Code Playgroud) 我在理解一些QList行为方面遇到了问题.
#include <QList>
#include <iostream>
using namespace std;
int main()
{
QList<double> *myList;
myList = new QList<double>;
double myNumber;
double ABC;
for (int i=0; i<1000000; i++)
{
myNumber = i;
myList->append(myNumber);
ABC = myList[i]; //<----------!!!!!!!!!!!!!!!!!!!
cout << ABC << endl;
}
cout << "Done!" << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到编译错误无法在标记行的赋值中将'QList'转换为'double'.它在我使用时起作用ABC = myList.at(i)
,但QT参考似乎说at()
并且[] operator
是同样的事情.有人知道是什么产生了影响吗?
谢谢
我有很长一段时间遇到这个问题 - 我将固定大小的2D数组作为类成员.
class myClass
{
public:
void getpointeM(...??????...);
double * retpointM();
private:
double M[3][3];
};
int main()
{
myClass moo;
double *A[3][3];
moo.getpointM( A ); ???
A = moo.retpointM(); ???
}
Run Code Online (Sandbox Code Playgroud)
我想将指针传递给M
外面的矩阵.这也可能是很简单的,但我就是找不到适当的组合&
和*
等
感谢帮助.
有没有办法添加来自给定文件夹的所有库,而无需将每一个库添加到LIBS
Qt项目文件中的变量.
我已将所有库(DLL(win)或SO(unix))与头文件放在一个目录(MYLIBS)中,并尝试这样的方法:
LIBS *= -L$$PWD/MYLIBS -l*
INCLUDEPATH += $$PWD/MYLIBS
DEPENDPATH += $$PWD/MYLIBS
Run Code Online (Sandbox Code Playgroud)
它不适用于错误消息cannot find -l*
.是否可以qmake
在创建Makefile时使用通配符?
我一直在研究一些用于创建直方图的简单代码,并发现以下代码:
double value = 1.2;
double bucketSize = 0.4;
double bucketId = value / bucketSize;
std::cout << "bucketId as double: " << bucketId << std::endl;
std::cout << "bucketId as int: " << int(bucketId) << std::endl;
Run Code Online (Sandbox Code Playgroud)
导致疯狂的输出:
bucketId as double: 3
bucketId as int: 2
Run Code Online (Sandbox Code Playgroud)
寻找合适的时候);这基本上毁了我的电脑信任bucketId
的value
同时,创建直方图.
我知道存在舍入错误等但是这个问题是否有任何通用解决方案?
(以防万一)请不要建议0.5
在施法前添加分区的结果,int
因为在某些情况下它显然不能很好地工作(例如double value = 3; double bucketSize = 2;
)
提前致谢.
我经常想使用QTextEdit作为显示正在写入流的内容的快速方法.也就是说,我不想写QTextStream(stdout),而是想做类似的事情:
QTextEdit qte;
QTextStream out(qte);
Run Code Online (Sandbox Code Playgroud)
如果我在写入附加到QString的QTextStream后发出信号,我可以做类似的事情.
问题是我希望界面与我流式传输时的界面相同stdout
:
out << some data << endl;
Run Code Online (Sandbox Code Playgroud)
关于如何实现这一目标的任何想法?
提前致谢.
我正在尝试编译这样的代码:
#include <iostream>
using namespace std;
class CPosition
{
private:
int itsX,itsY;
public:
void Show();
void Set(int,int);
};
void CPosition::Set(int a, int b)
{
itsX=a;
itsY=b;
}
void CPosition::Show()
{
cout << "x:" << itsX << " y:" << itsY << endl;
}
class CCube
{
friend class CPosition;
private:
CPosition Position;
};
main()
{
CCube cube1;
cube1.Position.Show();
cube1.Position.Set(2,3);
cube1.Position.Show();
}
Run Code Online (Sandbox Code Playgroud)
但是在函数main()中无法访问'CCube :: Position'3次.我希望在CPube之外声明类CPosition,以便将来可以在新类中使用它,例如CBall :)但是如何在不使用继承的情况下使其工作.可能吗 :)?
问候,PK