您的位置:首页 > 编程语言 > C语言/C++

C++开发问题汇总

2008-01-02 17:33 316 查看
7.linux下取得系统时间
struct tm * time1;
time_t t;
time(&t);
time1 = localtime(&t);
printf("%d-%d-%d %d:%d:%d/n" , 1900+time1->tm_year,time1->tm_mon+1, time1->tm_mday, time1->tm_hour, time1->tm_min, time1->tm_sec);


6.vector删除重复元素的方法
     通过结合使用sort( )和unique( )函数可以实现删除vector重复元素,但这样会改变vector原来的元素顺序.如果vector的元素序列跟程序逻辑有关, 那只能另外选择方法. 如下例:

void FilterVector(SV *v)
{
if (v == NULL)
  return;

string str;
vector<string>::iterator i, it;

i = v->begin();
while (i != v->end())
{
  it = i + 1;
  while (it != v->end())
  {
   if (*it == *i)
    it = v->erase(it);
   else
    it++;
  }
  i++;
}
}


5.标准库map.erase()的用法
if (!g_SendData.empty())
{
   std::map<string, time_t>::iterator itr;
   for (itr=g_SendData.begin(); itr!=g_SendData.end(); )
   {
       if (difftime(tNow, itr->second) > config.t_ServerConfig.nTimeOut)
       {
          g_SendData.erase(itr++);
       }
       else
           itr++;
   }
}

4.根据窗口句柄得到可执行文件路径
#include <psapi.h>
#pragam comment(lib, "psapi.lib")

DWORD ProcessID = 0;
HANDLE hProcess = 0;
char szPath[512] = {0};
hProcess = OpenProcess(PROCESS_ALL_ACCESS, TRUE, ProcessID);    
GetModuleFileNameEx(hProcess, NULL, szPath, 512);

3. CFileDialog出错的解决方法

日期:2007-7-17
问题描述:程序在实例化一个CFileDialog后,点击确定或取消按钮, 或进入代码,退出调用该函数的函数时,出现内存错误,错误号
Unhandled   exception   in   xxx.exe(KERNEL32.DLL):   0xC0000005:   Access   Violation.
解决办法:更改包含afxwin.h头文件的代码为:
#define _WIN32_WINNT 0x0500     // allow Win2000 specific calls
#define VC_EXTRALEAN            // Exclude rarely-used stuff from Windows headers
#include              // MFC core and standard components
#undef _WIN32_WINNT

        然后,我在这里找到了关于这个问题的具体说明:
        这是MFC6.0中的CFileDialog内嵌一个OPENFILENAME结构的原因。如果你定义了_WIN32_WINNT=0x500,那么OPENFILENAME会比之前的版本多一些成员,造成你的工程中的CFileDialog声明就和MFC6.0的DLL中的实现代码不匹配,在运行时会改写MFC的CFileDialog中m_ofn成员之后的变量。  
    
  这个问题在MFC7.0中已经修正了,使用的OPENFILENAME从成员变量变成指针(m_pOFN   )。你可以参照http://msdn.microsoft.com/msdnmag/issues/0800/c/default.aspx的方法修改你的代码。

2.程序无法调试
日期:2007-7-17
问题描述:程序无法加入断点
解决办法:此问题是由于为了调试方便,把Debug和Release版的可执行文件编译到同一个目录的相同文件
名下,若编译了一个Release版本.exe,下次再进行调试时,应首先清除一次,重新编译All,否则会导致
上述问题;

1.程序无法调试
日期:2007-7-15
问题描述:程序无法加入断点
解决办法:此问题时加入自定义消息后引起的。自定义消息有固定格式,OnSomeFunction(UINT
lParam,LONG wParam), 若将函数原形生命诚OnSomeFunction()则会出现该问题;

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息