小编ker*_*nel的帖子

使用std :: map时无法捕获未处理的exection

我试图利用operator[]in std::map来使用键读取元素.但是当我试图访问一个无效的密钥时,它会抛出一个我无法使用的异常try- catch阻塞.这是我正在使用的代码:

class MapElement
{
 public:
     int a;
     char c;
};

int main()
{
   MapElement m1,m2,m3;
   m1.a =10;m1.c = 'a';
   m2.a =20;m2.c ='b';
   m3.a =30;m3.c ='c';

   map <char ,MapElement*> Mymap;
   map<char,MapElement*>::iterator iter = Mymap.begin();
   Mymap.insert(iter , std::pair<int, MapElement*>('1',&m1));
   Mymap.insert(iter , std::pair<int, MapElement*>('1',&m2));
   cout<<Mymap['1']->a;
   try
   {
      cout<<Mymap['2']->a;
   }
   catch(exception e)
   {
       cout<<e.what();
   }
   catch(...)
   {
        cout<< "unknown error";
   }
}
Run Code Online (Sandbox Code Playgroud)

我该如何处理这个例外?

c++ stl exception stdmap

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

QHash 在不同的 qt 版本中表现不同

我正在 QT 版本 4.8 以及 5.12.9 中编译以下代码。

QHash<QString, int> m_userDataHash;
m_userDataHash.insert("white", 1);
m_userDataHash.insert("yellow", 3);
m_userDataHash.insert("lightblue", 5);
m_userDataHash.insert("darkblue", 7);
m_userDataHash.insert("pink", 9);
m_userDataHash.insert("red", 11);
m_userDataHash.insert("green", 13);
m_userDataHash.insert("black", 15);
m_userDataHash.insert("grey", 17);

QHashIterator<QString, int> i(m_userDataHash);
while (i.hasNext())
{
    i.next();
    ui->ColorCombo->addItem(i.key());
}
Run Code Online (Sandbox Code Playgroud)

由于不同 qt 版本中的插入顺序不同,此代码的行为有所不同。

在 Qt 5.12.9 中

5.12.9

在 Qt 4.8 中

4.8

我怎么解决这个问题?为什么会发生这种情况?

我检查了 QHash 文档但无法弄清楚任何内容。 https://doc.qt.io/qt-5/qhash.html#insert

c++ qt insert qhash

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

宏观意义在c ++中

我碰巧遇到了一个宏定义,如下面的c ++代码所示(https://github.com/LairdCP/UwTerminalX).

 #define SpeedModeInactive                 0b00
 #define SpeedModeRecv                     0b01
 #define SpeedModeSend                     0b10
 #define SpeedModeSendRecv                 0b11
Run Code Online (Sandbox Code Playgroud)

当我尝试使用visual studio 2010编译它时,它给我以下错误.

Error   14  error C2059: syntax error : ')' 
Run Code Online (Sandbox Code Playgroud)

这个宏是什么意思?宏的用法如下所示.

if ((gchSpeedTestMode == SpeedModeSendRecv || gchSpeedTestMode == SpeedModeRecv) && (gintSpeedBytesReceived10s > 0 || ui->edit_SpeedBytesRec10s->text().toInt() > 0))
{
    //Data has been received in the past 10 seconds: start a timer before stopping to catch the extra data packets
    gchSpeedTestMode = SpeedModeRecv;
    gtmrSpeedTestDelayTimer = new QTimer();
    gtmrSpeedTestDelayTimer->setSingleShot(true);
    connect(gtmrSpeedTestDelayTimer, SIGNAL(timeout()), this, SLOT(SpeedTestStopTimer()));
    gtmrSpeedTestDelayTimer->start(5000);

    //Show message …
Run Code Online (Sandbox Code Playgroud)

c++ macros qt

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

标签 统计

c++ ×3

qt ×2

exception ×1

insert ×1

macros ×1

qhash ×1

stdmap ×1

stl ×1