c++:Status问题(status是c++中的关键字吗?是一种数据类型吗?它有啥作用?)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++:Status问题(status是c++中的关键字吗?是一种数据类型吗?它有啥作用?)相关的知识,希望对你有一定的参考价值。
参考技术Atypedef int Status;重命名int为Status,见Status如int。
在C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员。
扩展资料:
工作原理:
C++语言的程序因为要体现高性能,所以都是编译型的。但其开发环境,为了方便测试,将调试环境做成解释型的。即开发过程中,以解释型的逐条语句执行方式来进行调试,以编译型的脱离开发环境而启动运行的方式来生成程序最终的执行代码。
生成程序是指将源码(C++语句)转换成一个可以运行的应用程序的过程。如果程序的编写是正确的,那么通常只需按一个功能键,即可搞定这个过程。该过程实际上分成两个步骤。
参考资料来源:百度百科-C++
C++ 分割在 vector.erase() 上失败
【中文标题】C++ 分割在 vector.erase() 上失败【英文标题】:C++ segmentation fail on vector.erase() 【发布时间】:2011-03-31 05:01:35 【问题描述】:我的程序中的矢量有问题。我发现了许多类似的问题,但没有解决方案。此代码在新线程中:
while(status == RUN)
msleep(20);
while(status != DESTROY && (!actions.empty()) )
item = actions.begin();
(*item)();
cout<< "try remove the action!\n";
item=actions.erase(actions.begin());
cout << "everything ok!\n";
输出是:
action!
try remove the action!
Segmentation fault
actions 是一个向量
struct action
string query;
long size;
void operator()()
cout << "action!\n";
;
更新
真正的问题是:这个方法的结构体已经被销毁了。
class mthread
...
deque<action> actions;
...
operator()
(loop above)
;
class mthread_holder
mthread* mt;
operator()()
(*mt)();
mthread_holder(mthread *p)
mt = p;
;
那我就用:
threads.back().thrd = new boost::thread(mthread_holder(mthrd));
我想,我需要更安全地存放它
如何在没有 boost::bind 的情况下将可调用对象存储在线程中并保持指向它的指针?
【问题讨论】:
【参考方案1】:猜测一下:您没有任何锁来保护您的actions
队列,是吗?
当从多个线程访问同一个数据结构时,您需要使用锁或其他同步构造来防止同时访问,否则可能会导致奇怪的事情(崩溃或更糟)。
当您使用它时,您可能应该使用条件变量来避免每 20 毫秒唤醒一次,即使您无事可做。并为队列使用deque
,而不是vector
。
【讨论】:
我发现了真正的问题。在此循环开始之前销毁的线程对象。以上是关于c++:Status问题(status是c++中的关键字吗?是一种数据类型吗?它有啥作用?)的主要内容,如果未能解决你的问题,请参考以下文章
QT C++ 新手问题 error: collect2: ld returned 1 exit status。请高手指教!
DEV C++编写程序出现 [errror]Id returned 1 exit status错误可能出现的原因(本人时一个编程小白,这个错误已经犯了两次了):