VS 2010 C++ CLR Library项目,添加comutil.h库时出错
> Error 20 error LNK2001: unresolved
> external symbol "extern "C" long
> __stdcall VariantCopy(struct tagVARIANT *,struct tagVARIANT const
> *)" (?VariantCopy@@$$J18YGJPAUtagVARIANT@@PBU1@@Z) D:\Projects\AL\Service\ncFlow\ncOPClient.NET\Stdafx.obj ncOPClient.NET
> Error 18 error LNK2001: unresolved
> external symbol "extern "C" void
> __stdcall VariantInit(struct tagVARIANT *)"
> (?VariantInit@@$$J14YGXPAUtagVARIANT@@@Z) D:\Projects\AL\Service\ncFlow\ncOPClient.NET\Stdafx.obj ncOPClient.NET
> Error 13 error LNK2001: unresolved
> external symbol "void __stdcall
> _com_issue_error(long)" (?_com_issue_error@@$$FYGXJ@Z) D:\Projects\AL\Service\ncFlow\ncOPClient.NET\Stdafx.obj ncOPClient.NET
> Error 10 error LNK2028: unresolved
> token (0A000376) "void __stdcall
> _com_issue_error(long)" (?_com_issue_error@@$$FYGXJ@Z) …Run Code Online (Sandbox Code Playgroud) 这是strtok()的解释.
#include <string.h>
char* strtok( char* s1,
const char* s2 );*
Run Code Online (Sandbox Code Playgroud)
第一次调用strtok()会返回指向s1指向的字符串中第一个标记的指针.对strtok()的后续调用必须将NULL指针作为第一个参数传递,以便获取字符串中的下一个标记.
但我不知道,为什么你必须传递NULL指针才能获得字符串中的下一个标记.我搜索了大约15分钟,但没有在互联网上找到解释.
考虑:
#include <map>
int main()
{
std::map< int, int > m;
m[ 0 ] = 0;
m[ 1 ] = 1;
m.erase( 0 ); // ok
m.erase( 2 ); // no-op
m.erase( m.find( 2 ) ); // boom!
}
Run Code Online (Sandbox Code Playgroud)
(好的,所以标题讨论了擦除end()迭代器,但是find会返回end()以查找不存在的键.)
为什么擦除不存在的键OK,但擦除end()会爆炸.我在标准中没有看到任何明确的提及?
我在VS2005上尝试了这个(在调试配置中抛出异常)和GCC 4.0.1(100%CPU).它是依赖于实现的吗?
谢谢.
说我有这个例子:
char const * const
foo( ){
/* which is initialized to const char * const */
return str;
}
Run Code Online (Sandbox Code Playgroud)
正确的方法是什么来避免编译器警告"返回类型的类型限定符是没有意义的"?
我在读中断.可以通过特殊的中断屏蔽挂起非关键中断.这称为中断屏蔽.我不知道什么时候/为什么你可能想要或需要暂时暂停中断?可能是信号量,还是在多处理器环境中编程?
我已经注意到很长一段时间,当你尝试复制链接位置或在Facebook上打开一个链接时,它会修改链接并传递它l.php.
例如,我可以被发送到
http://www.facebook.com/l.php?u=http%3A%2F%2Fwww.google.com%2F&h=DKVUritNDJDJLDLVbldoDLFKBLOD5dlfDJY_-d3fgDUaA9b
Run Code Online (Sandbox Code Playgroud)
即使我的浏览器将链接预览呈现为http://www.google.com/.
今天,我使用Firebug进行了仔细研究,发现Facebook投入onmousedown="UntrustedLink.bootstrap($(this)[...]了<a>标签.第二个我右键单击链接,我看到hrefFirebug中的属性更改.
这让我担心.
我们很多人给不太精通技术的人提供的建议(在点击之前检查链接带你到哪里,这样你就不会成为网络钓鱼的受害者)现在似乎变得毫无用处.这不是安全隐患吗?网络钓鱼网站不能滥用这个吗?
为什么浏览器不会通过禁止onmousedown更改href或通过在读取href属性之前运行javascript 来阻止此行为,以便我被发送到我认为我要去的位置,而不是在我点击它时的一个更改?
编辑:我想简单地强调,除了网络钓鱼的风险之外,困扰我的是用户被误导,我觉得这种情况可能会发生,无论是否受信任来源.
如果operator=正确定义,可以使用以下作为复制构造函数吗?
MyClass::MyClass(MyClass const &_copy)
{
*this = _copy;
}
Run Code Online (Sandbox Code Playgroud) 我目前正在开发一个嵌入式设备项目,我遇到了性能问题.分析已经找到了我想要消除的O(N)操作.
我基本上有两个数组int A[N]和short B[N].条目A是唯一的,并由外部约束排序.最常见的操作是检查是否有特定值a出现A[].不太常见但仍然常见的是对元素的改变A[].新值与先前值无关.
由于最常见的操作是查找,所以B[]它就在哪里.它是一个排序的索引数组A[],例如,A[B[i]] < A[B[j]]当且仅当i<j.这意味着我可以在A使用二进制搜索时找到值.
当然,当我更新A[k],我必须要找到k的B,并将其移动到新位置,以维持搜索顺序.因为我知道旧的和新的价值观A[k],这只是新旧立场之间的memmove()一个子集.这是我需要解决的O(N)操作; 由于旧的和新的值基本上是随机的,我平均在N/2 N/3个元素上移动.B[]kA[k]
我考虑std::make_heap使用[](int i, int j) { return A[i] < A[j]; }谓词.在这种情况下,我可以轻松地B[0]指出最小元素A,并且更新B现在是一个廉价的O(log N)重新平衡操作.但是,我通常不需要A的最小值,我需要查找是否存在任何给定值.现在这是一个O(N log N)搜索B.(我的N个元素中的一半在堆深度log N处,四分之一在(log N)-1处等),这与直接在O(N)搜索中没有任何改进A.
考虑到std::set有O(log N)插入和查找,我会说可以在这里获得相同的性能以进行更新和查找.但是我该怎么做?我需要另一张订单B …
有关Graphviz Library中dot的算法是否有任何文档(完整的伪代码?)?
我只找到了一些部分伪代码文档.
if( (A) && (B) )
{
//do something
}
else
//do something else
Run Code Online (Sandbox Code Playgroud)
问题是,如果A为FALSE,该语句是否会立即中断.B会被评估吗?
我问这个情况,当数组实际上是空的并且元素为零时,B检查数组索引的有效性就说数组[0].因此我们尝试访问超出数组范围的内容,因此抛出了一个段错误.特别
if( (array.GetElements() > 0) && (array[0]))
array[0]->doSomething();
else
//do nothing and return
Run Code Online (Sandbox Code Playgroud)
如果array [0]实际得到了评估,这可能会很危险,因为它会在没有第一次检查的情况下在"&&"的左侧进行段错误.优先级告诉我,左侧肯定会优先,但它并没有告诉我,如果左边是假,它将不会评估右侧.