小编Wes*_*ler的帖子

无效的使用:: - C++禁止使用不带类型的向量

我偶然发现了一个对我没用的编译错误.那么,当然,我转向StackOverflow .....

系统

Linux(Ubuntu 10.04 32位,gcc(Ubuntu 4.4.3-4ubuntu5.1)4.4.3,Eclipse Indigo

**题**

当然是明显的问题; 什么是gcc抱怨?

背景

我有一个类ThreadTime,它在自己的cpp和h文件中编码,ThreadTime.cpp和.h以及它自己的命名空间THREAD_TIME;

在main()中,我启动两个线程,然后调用ThreadA和ThreadB,然后进入无限循环,睡眠2秒,然后检查ThreadA和ThreadB是否仍在运行.特别是,如果ThreadA已经停止,它将重新启动.

每个线程都创建一个关联的ThreadTime对象.在我的两个线程中都有循环.在每个循环期间,ThreadTimer都会更新(在<2秒内),因此main()循环可以看到时间在线程中前进.

在创建每个ThreadTimer时,其地址将添加到类型的全局向量g_CthreadVector中std::vector<ThreadTime*>.g_CthreadVector是ThreadType.cpp中的文件全局.

最好只在这里粘贴整个班级.所以...

ThreadTime.cpp

#include "ThreadTime.

namespace THREAD_TIME
{
   std::vector<ThreadTime*>      g_CthreadVector; // threads to kill and monitor

   ThreadTime::ThreadTime(thread_t* a, time_t b, void* c)
     : m_pthread(a), m_time(b), m_lasttime(b-2), m_function(c), m_terminate (FALSE)
   {
      m_name = "a ThreadTime object";
      g_CthreadVector.push_back( this );
   }

   ThreadTime::~ThreadTime()
   {
      std::vector<ThreadTime*>::iterator     it       (GetIterator());
      if ( it != g_CthreadVector.end() )
         g_CthreadVector.erase( it );
   }

   void     ThreadTime::UpdateTime( void )
   {
      m_lasttime = m_time;                                              // …
Run Code Online (Sandbox Code Playgroud)

c++ iterator vector

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

更改linux套接字文件权限

首先,是的,这与这个堆栈溢出问题有关,但我的情况略有不同,我的帖子没有得到答案。

因此,在我的 Dell 桌面工作站 Ubuntu 10.04 32 位上,我开发了一个服务器程序,旨在为 Apache 运行的 PHP“程序”提供 Unix 域套接字。(注意:umask = 0022)我将套接字文件命名为/home/wmiller/ACT/web_socket_file。(ACT 是对产品名称的引用)。/home/wmiller/ACT 的权限为 777。 /home/wmiller/ACT/web_socket_file 的创建权限为 777。

现在,我将程序复制到我的测试平台,一个 Q7 格式的 Intel 处理器板,它也有 Ubuntu 10.04 32 位和 umask = 0022。相同的目录,相同的 777 目录权限。但是,现在当我运行代码 /home/wmiller/ACT/web_socket_file 时,会出现 755 权限,而 Apache/PHP 无法打开 Unix 域套接字,因为它获取的是 rx 权限,而不是 rw- 或 rwx。Apache 正在 uid = www-data 中运行。

sockaddr_un       webServAddr;
remove( g_webSocketFileName.c_str() );       // to erase any lingering file from last time

memset(&webServAddr, 0, sizeof(webServAddr));
webServAddr.sun_family        = AF_UNIX;
snprintf( webServAddr.sun_path, UNIX_PATH_MAX, "%s", g_webSocketFileName.c_str() ); …
Run Code Online (Sandbox Code Playgroud)

c++ sockets unix-socket

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

std :: string数组的初始化程序太多了

MEA CULPA:

好的,我错了.我找到了VarInfo :: m_datatypeName []的声明,它是VarInfo :: m_datatypeName [9].是的,硬编码.我向所有为我挠头的人道歉.


我收到此错误:

too many initializers for 'std::string[9]'
Run Code Online (Sandbox Code Playgroud)

对于这个声明:

std::string       VarInfo::m_datatypeName[]  = { "", "STRING", "TIME", "MACADDRESS", "IPADDRESS", "STRINGSET", "SET", "UINT32", "INT32", "BOOL" };
Run Code Online (Sandbox Code Playgroud)

新的消息:

注意:声明中没有9或10.如果分配列表中的项目不超过九个,则此功能正常.这是第10项是问题.

结束新的信息:

我有这个模糊的回忆,std :: string声明为一些默认的字符数预分配空间,所以我想怀疑字符串数组的类似行为.

所以,这是问题所在.我应该如何正确地宣布这个?希望不必硬声明m_datatypenames的大小?

c++ stdstring

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

c ++测试缺少的回调函数

编辑:添加反引号到回调模板.界面正在读取星号作为降价指示器,而不仅仅是星号!

在我正在编写的Windows DLL/Linux中,我为用户应用程序提供了一种注册回调函数的方法.效果很好.回调原型看起来像(void)(*callback)(void*);

我在编写文档时感到很偏执并意识到,我没有很好的方法知道注册地址是否有效.唯一的反馈是崩溃或调用try/catch中的回调.

我不知道如果回调不存在以及谁知道执行了什么会抛出什么异常.甚至不确定对"无处"的调用可以恢复到足以产生异常而不是崩溃.

是的,我知道这是用户的问题.只是想要深思熟虑,也许可以帮助用户理解他的错误.

那么,这会抛出什么异常?Windows和Linux如果不同则请回答.

或者,有没有更好的方法来解决这个问题,而不必使用异常捕获来检测丢失的函数?

c++ exception callback

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

标签 统计

c++ ×4

callback ×1

exception ×1

iterator ×1

sockets ×1

stdstring ×1

unix-socket ×1

vector ×1