小编fog*_*bit的帖子

创建并验证指向"if"语句的指针

这段代码是否正确?

void foo ( int* p )
{
  if ( int* p2 = p ) // single "="
  {
    *p2++;
  }
}
Run Code Online (Sandbox Code Playgroud)

我一直以为它不是,但最近我在同事的矿源中看到过这样的代码.

如果"p"为NULL怎么办?MS VS 2008工作正常,但显示"警告C4706:条件表达式中的赋值".

谢谢.

c++ pointers if-statement

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

endl不适用于wstring(unicode)

这是代码:

  std::ofstream f("file1.txt");
  f<<"123"<<std::endl<<"456";           //(*1)

  /*std::stringstream ordinary_strstream; This works too
  ordinary_strstream<<"123"<<'\n'<<"456";
  f<<ordinary_strstream.str();*/

  std::wstringstream s;
  s<<L"123"<<std::endl<<L"456";         //(*2)
  s<<L"123"<<L"\n"<<L"456";             //(*3) 
  s<<"123"<<WCHAR(13)<<WCHAR(10)<<"456";//(*4)

  HANDLE h =CreateFileW(L"file2.txt", GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
    NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

  ULONG l;
  WriteFile(h, s.str().c_str(), s.str().length() * 2, &l, NULL);
Run Code Online (Sandbox Code Playgroud)

在(*1)的情况下有一个换行符,在(*2)和(*3)中我看不到file2.txt中的换行符.在(*3)中有换行符.我用它notepad.exe来浏览.十六进制编辑器0x0D仅显示无字节0x0A.

我应该如何正确地将换行符放在unicode文本文件中?谢谢.

c++ windows unicode newline wstring

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

如何等到互斥锁解锁?

有一系列互斥体.我的功能:

  1. 检查是互斥锁被锁定

2A.如果没有,那么锁定它

2B.如果已锁定,请等待解锁并锁定它

另一个功能解锁它.

问题是我在等待部分遇到了崩溃:

HANDLE mutexes[N];

void func(int i)
{
  // (*) wait until unlocked or create if unlocked
  while ((mutexes[i] = CreateMutex(NULL, TRUE/*same with FALSE*/, NULL)) != NULL);
  /*or WaitForSingleObject(mutexes[i], INFINITE)*/

  mutexes[i] = CreateMutex(NULL, TRUE, NULL);
}
Run Code Online (Sandbox Code Playgroud)

在(*)点,我遇到了崩溃 - 访问冲突.当它试图创建之前已经创建的互斥锁[i]时发生崩溃.我不能使用WaitForSingleObject,因为第一次没有创建互斥锁[i],文档说WaitForSingleObject未定义.此外,如果我使用此功能,我会得到同样的崩溃.

我只需要这种简单伪代码的模拟

if (mutex_has_been_created[mutexes[i]])
  WaitUntilRelease()
CreateMutex();
Run Code Online (Sandbox Code Playgroud)

我试图将它包装在一个关键部分并获得相同的结果.我确信这i是在正确的范围内.我不能使用Boost/pThreads/etc.

我知道我的问题很简单,但我找不到解决方案.在所有示例中,我都看到过之前创建了一个互斥锁WaitForSingleObject,这对我来说不起作用.

谢谢.

c++ winapi multithreading

3
推荐指数
2
解决办法
2万
查看次数

未解决的外部符号,但dumpbin说没关系

我下载了Crypto++5.62并使用默认项目设置构建它.在我的项目中,我设置了路径,cryptopp.lib并在"附加依赖项"中定义了它的名称.Crypto ++和我的项目 - VS 2008.

在构建我的项目期间,我得到:

main.obj : error LNK2001: unresolved external symbol 
  "class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const CryptoPP::DEFAULT_CHANNEL" (?DEFAULT_CHANNEL@CryptoPP@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@B)

main.obj : error LNK2001: unresolved external symbol 
  "bool (__cdecl* CryptoPP::g_pAssignIntToInteger)(class type_info const &,void *,void const *)" (?g_pAssignIntToInteger@CryptoPP@@3P6A_NABVtype_info@@PAXPBX@ZA)
Run Code Online (Sandbox Code Playgroud)

dumpbin /all cryptopp.lib 在公共符号部分显示我

19471C _imp_?DEFAULT_CHANNEL@CryptoPP@@3V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@B

1D6F30 __imp_?g_pAssignIntToInteger@CryptoPP@@3P6A_NABVtype_info@@PAXPBX@ZA
Run Code Online (Sandbox Code Playgroud)

那怎么了?为什么链接器找不到符号?

UPD:

我的项目设置中的链接器命令行

/OUT:"C:\Projects\crypto_hash\Debug\crypto_hash.exe" /NOLOGO /LIBPATH:"e:\libs\cryptopp\cryptopp562\cryptopp\Win32\DLL_Output\Debug" /MANIFEST /MANIFESTFILE:"Debug\crypto_hash.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG /PDB:"C:\Projects\crypto_hash\Debug\crypto_hash.pdb" /DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT cryptopp.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

c++ unresolved-external crypto++

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

比较两个用户定义对象数组

这里是C++/Python的人.

我需要比较两个php-arrays containsig用户定义的类.

class Point
{
  var $x;
  var $y;

  function _construct($x_, $y_)
  {
    $this -> x = $x_;
    $this -> y = $y_;
  }
}

$mas1 = array(new Point(0,1),new Point(0,1),new Point(0,1));   
$mas2 = array(new Point(0,1),new Point(0,1),new Point(0,1)); 

if (array_diff($mas1,$mas2) == array())
{
  echo "they're equal\n";
}
Run Code Online (Sandbox Code Playgroud)

我得到了"可捕获的致命错误:类Point的对象无法转换为字符串".当我试图使用简单

if ($mas1 == $mas2)
Run Code Online (Sandbox Code Playgroud)

我弄错了.

问题:1)有没有办法为我的类重载比较运算符点2)如何正确比较包含用户定义类的两个数组?

谢谢.

我用php 5.2.11

php arrays comparison

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