C++ - 错错错> <

每次都能被各种错给弄抓狂=-=,真是受不了。。索性来个集锦吧。


1、Error:No viable conversion from '__bind<int &, sockaddr *, unsigned long>' to 'int'

源码:

int localSocket,remoteSocket;
struct sockaddr_in  localAddr;
int result = bind(localSocket, (struct sockaddr *)&localAddr,sizeof(localAddr));

分析:

觉得应该没什么错才对的嘛,函数的各个类型也都完全符合,觉得非常纠结,遂上网一查,发现是因为运用了using namespace std;来强制运用了标准库里面的名字空间,而在标准名字空间里也有一个函数叫bind(),所以就被先匹配了,而我想用的sys/socket里的bind()没有被匹配到。

解决方案:

将bind函数声明到全局域,即作以下更改:

int result = ::bind(localSocket, (struct sockaddr *)&localAddr,sizeof(localAddr));



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#include "mainwindow.h" #include "ui_mainwindow.h" #include<QMessageBox> #include<QTextEdit> #include<QPushButton> TemperatureThread::TemperatureThread(QObject *parent) : QThread(parent) { m_temperature = 0.0; QPushButton * btn= new QPushButton(); //btn->show(); btn->setText("this"); btn->setParent(QObject); } void TemperatureThread::run() { while (true){ m_temperature = qrand() % 100; emit temperatureChanged(m_temperature); msleep(1000); } } MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); m_temperatureThread = new TemperatureThread(this); m_timer = new QTimer(this); m_threshold = 0.0; connect(m_temperatureThread, &TemperatureThread::temperatureChanged, this,&MainWindow::updateTemperature); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_startButton_clicked() { if (m_timer->isActive()) { QMessageBox::warning(this,tr("Warning"),tr("Alarm already started")); return; } bool ok; m_threshold = ui->thresholdEdit->text().toDouble(&ok); if (!ok) { QMessageBox::warning(this,tr("warning"),tr("Invalid")); return; } m_temperatureThread->start(); m_timer->start(1000); } void MainWindow::on_stopButton_clicked() { if (!m_timer->isActive()){ QMessageBox::warning(this,tr("Warning"),tr("Alarm not started yet")); return; } m_temperatureThread->quit(); m_temperatureThread->wait(); m_timer->stop(); ui->temperatureLabel->setText(tr("0.0")); } void MainWindow::updateTemperature(double temperature) { ui->temperatureLabel->setText(QString::number(temperature)); if (temperature > m_threshold){ QMessageBox::critical(this,tr("Warning"),tr("Temperature too high")); } }在哪
05-24
代码存在一些问题: 1. 在 TemperatureThread 的构造函数中创建了一个 QPushButton 实例,但并没有将其添加到界面中。 2. 在创建 QPushButton 实例时,使用了 QObject 作为其父对象,应该使用 MainWindow 或其子类作为父对象。 3. 在 on_startButton_clicked 函数中,应该先判断是否已经启动了温度线程,再进行阈值的设置和启动定时器。 4. 在 on_stopButton_clicked 函数中,应该先判断是否已经启动了定时器和温度线程,再停止定时器和温度线程,并将温度显示标签的文本清零。 5. 在 updateTemperature 函数中,应该将温度值转换为字符串后再设置到温度显示标签上。 下面是修改后的代码: ```c++ #include "mainwindow.h" #include "ui_mainwindow.h" #include <QMessageBox> #include <QTextEdit> #include <QPushButton> TemperatureThread::TemperatureThread(QObject *parent) : QThread(parent) { m_temperature = 0.0; } void TemperatureThread::run() { while (true){ m_temperature = qrand() % 100; emit temperatureChanged(m_temperature); msleep(1000); } } MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); m_temperatureThread = new TemperatureThread(this); m_timer = new QTimer(this); m_threshold = 0.0; connect(m_temperatureThread, &TemperatureThread::temperatureChanged, this, &MainWindow::updateTemperature); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_startButton_clicked() { if (m_temperatureThread->isRunning()) { QMessageBox::warning(this,tr("Warning"),tr("Alarm already started")); return; } bool ok; m_threshold = ui->thresholdEdit->text().toDouble(&ok); if (!ok) { QMessageBox::warning(this,tr("warning"),tr("Invalid")); return; } m_temperatureThread->start(); m_timer->start(1000); } void MainWindow::on_stopButton_clicked() { if (!m_timer->isActive() || !m_temperatureThread->isRunning()) { QMessageBox::warning(this,tr("Warning"),tr("Alarm not started yet")); return; } m_temperatureThread->quit(); m_temperatureThread->wait(); m_timer->stop(); ui->temperatureLabel->setText(QString::number(0.0)); } void MainWindow::updateTemperature(double temperature) { ui->temperatureLabel->setText(QString::number(temperature)); if (temperature > m_threshold){ QMessageBox::critical(this,tr("Warning"),tr("Temperature too high")); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值