我的问题是,当我想创建一个下载的库时,我从GCC得到一些奇怪的编译错误,编译器要求纠正的代码似乎是正确的.
错误都是这样的:
Catalogue.h:96:错误:'strlen'没有依赖于模板参数的参数,因此'strlen'的声明必须是可用的
这是第96行的代码:
GaCatalogueEntry(const char* name, T* data)
{
if( name )
{
_nameLength = (int)strlen( name ); // LINE 96
// copy name
_name = new char[ _nameLength + 1 ];
strcpy( _name, name ); // LINE 100: similar error
_data = data;
return;
}
_name = NULL;
_nameLength = 0;
_data = NULL;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做才能解决这些编译错误?
我在PHP项目上的合作伙伴反对我总是在动态SQL中清理整数值的做法.我们尽可能使用参数化查询.但是对于UPDATE和DELETE条件,Zend_Db_Adapter需要一个非参数化的SQL字符串.这就是为什么我,即使没有想到,总是写下这样的东西:
$db->delete('table_foo', 'id = ' . intval($obj->get_id()));
Run Code Online (Sandbox Code Playgroud)
这是等效的,但是(我已检查过ZF源代码)的更短版本:
$db->delete('table_foo', $db->qouteInto('id = ?', $obj->get_id(), 'INTEGER'));
Run Code Online (Sandbox Code Playgroud)
我的伙伴强烈反对这一点intval(),说如果$objID为null(该对象尚未保存到DB),我将不会注意到错误,并且DB操作将以静默方式执行.这就是他实际发生的事情.
他说,如果我们清理所有HTML表单输入,那么整数ID就不可能进入'; DROP TABLE ...',或' OR 1 = 1'或者另一个讨厌的值,并插入到我们的SQL查询中.因此,我只是偏执,使我们的生活变得更加复杂."不要再相信$_SESSION价值了"他说.
但是,对于字符串值条件,他同意:
$db->update->(
'table_foo',
$columns,
'string_column_bar = ' . $db->qoute($string_value))
);
Run Code Online (Sandbox Code Playgroud)
我没有证明他错了,他没有证明我错了.你能做到吗?
我想将希腊字母omega(U + 03A9)添加到我放在表单上的标签上.我已经切换了表单的编码,但是如何设置标签的内容以便出现omega而不是UTF char代码.
所以拿这个XAML
<Label Height="25">U+03A9</Label>
Run Code Online (Sandbox Code Playgroud)
我希望将U + 03A9转换为欧米茄
在后面的代码中我相信我可以做类似的事情
targetEncoding = Encoding.getEncoding(utfEncoding);
lblOmega.Content = targetEncoding.getBytes("\u03A9");
Run Code Online (Sandbox Code Playgroud)
但我想知道我是否可以在XAML中严格执行此操作
为什么Windows SendMessage()总是返回ZERO,即使邮件传递成功?有没有用SendMessage()检查邮件传递失败?
编辑
忘记提到我在c ++ DLL中使用SendMessage()
LRESULT result = ::SendMessage(hwndOtherWindow,WM_COPYDATA, NULL/*(WPARAM)this->GetSafeHwnd()*/,(LPARAM)&structCDS);
Run Code Online (Sandbox Code Playgroud)
"结果"始终为零:(,但消息成功传递到其他窗口
编辑
BOOL CDlg::OnCopyData(CWnd* pWnd, COPYDATASTRUCT* pCopyDataStruct)
{
return /*CDialog::OnCopyData(pWnd, pCopyDataStruct)*/ true; //true is the trick
}
Run Code Online (Sandbox Code Playgroud) 为什么这个代码(M类中的fnc值)不能通过SFINAE规则解决?我收到一个错误:
Error 1 error C2039: 'type' : is not a member of
'std::tr1::enable_if<_Test,_Type>'
Run Code Online (Sandbox Code Playgroud)
当然类型不是成员,它没有在enable_if的这个通用版本中定义,但是如果bool为真,并且如果它是假的则不实例化那么这不是fnc的这个版本背后的全部想法吗?可以请有人向我解释一下吗?
#include <iostream>
#include <type_traits>
using namespace std;
template <class Ex> struct Null;
template <class Ex> struct Throw;
template <template <class> class Policy> struct IsThrow;
template <> struct IsThrow<Null> {
enum {value = 0};
};
template <> struct IsThrow<Throw> {
enum {value = 1};
};
template <template <class> class Derived>
struct PolicyBase {
enum {value = IsThrow<Derived>::value};
};
template<class Ex>
struct Null : PolicyBase<Null> { };
template<class …Run Code Online (Sandbox Code Playgroud) 在Windows Phone中设置textblock的背景时遇到问题.
<TextBlock Text="Forget Password" Height="19" Width="156">
Run Code Online (Sandbox Code Playgroud) 我被问到作为奖励编程挑战,看看大括号是否匹配随机字符串或像这样的字符:{1 + 1}这将返回1,而{1 + 1})将返回0.这就是我所拥有的到目前为止,它似乎没有做任何事情.任何帮助都会很棒?谢谢
//bonus.cpp
#include <iostream>
#include <string>
#include <queue>
#include <stack>
using namespace std;
int checkBraces (string s)
{
//int myLength = s.length();
std::stack<int> stack;
char d;
for (int i = 0; i < s.length(); i++)
{
char c = s[i];
if (c == '(')
{
stack.push(c);
}
else if (c == '[')
{
stack.push(c);
}
else if (c == '{')
{
stack.push(c);
}
else if (c == ')')
{
if (stack.empty())
{
return false;
}
else …Run Code Online (Sandbox Code Playgroud) 我目前有一个模板功能,根据其模板参数A和B,可以向左或向右移动一个值:
template <int A, int B> void f(X) {
// ...
if (A >= B)
{
SetValue(X << (A-B));
}
else // (A < B)
{
SetValue(X >> (B-A));
}
Run Code Online (Sandbox Code Playgroud)
当我实例化模板时A<B,我在(无法到达)第一个分支上得到一个负向移位警告,否则我会收到第一个分支上留下负移位的警告.我们的代码库没有警告,所以这是不可接受的.这两个班次陈述是否有简洁易读的替代方案?
类似的问题(例如,向左或向右动态移动)没有这种虚假警告,因为移位距离是那里的运行时变量.
GetProcAddress与C++ 一起使用的常见"解决方案" 是"extern"C",但它打破了重载.名称修改允许多个函数共存,只要它们的签名不同.但是有没有办法找到这些受损的名称GetProcAddress?
我在MYSQL中有一个表:
CREATE TABLE test.tem(a INT,b INT);
Run Code Online (Sandbox Code Playgroud)
以下数据:
INSERT INTO test.tem VALUES(1,2),(1,1),(1,NULL),(2,3);
Run Code Online (Sandbox Code Playgroud)
现在数据应该是:
+------+------+
| a | b |
+------+------+
| 1 | 2 |
| 1 | 1 |
| 1 | NULL |
| 2 | 3 |
+------+------+
Run Code Online (Sandbox Code Playgroud)
我想按列a将列b更新到min(b)组.
所以SQL应该是:
UPDATE test.tem o
SET o.b = (SELECT
MIN(b)
FROM test.tem i
WHERE i.a = o.a)
Run Code Online (Sandbox Code Playgroud)
但是MYSQL 无法在FROM子句中指定更新目标表
所以我认为下面的SQL可以很好地解决我的问题:
UPDATE test.tem t1
JOIN test.tem t2
ON t1.a = t2.a
SET t1.b = t2.b
WHERE t1.b IS NULL
OR t1.b …Run Code Online (Sandbox Code Playgroud)