它给出了关于这段代码的标题中的错误:
string DDateTime::date2OracleDate(DATE Date)
{
string s;
s="TO_DATE('" + DateFormat("%d/%m/%Y",Date) + "','dd/MM/YYYY')";
return s;
}
我不明白这是怎么可能的,没有指针......
编辑:
string DDateTime::DateFormat(string sFormat,DATE Date)
{
struct tm tmTemp;
RipOf_AfxTmFromOleDate(Date, tmTemp);
RipOf_AfxTmConvertToStandardFormat(tmTemp);
char sFormatted[MAX_TIME_BUFFER_SIZE];
strftime(sFormatted, MAX_TIME_BUFFER_SIZE, sFormat.c_str(), &tmTemp);
return sFormatted;
}
答案 0 :(得分:5)
以下情况应该更好:
string DDateTime::date2OracleDate(DATE Date)
{
string s = "TO_DATE('";
s += DateFormat("%d/%m/%Y",Date);
s += "','dd/MM/YYYY')";
return s;
}
答案 1 :(得分:3)
你想要添加的三个字符串是C风格的字符串; each是指向字符串内容的指针。至少,我假设DataFormat
返回一个C风格的字符串;它不是标准功能,所以我不知道它是做什么的。
在C ++中,您不能简单地“添加”其中两个来获取C ++字符串,因为无法知道char*
实际上是字符串,还是指向某些任意数据的指针。您必须将其中一个转换为std::string
,然后您可以“添加”C风格的字符串。
string s = "TO_DATE(";
s += DateFormat(whatever);
s += "','dd/MM/YYYY')";
或
string s = string("TO_DATE(") + DateFormat(whatever) + "','dd/MM/YYYY')";
答案 2 :(得分:2)
您的文字字符串为char*
。我不确定您的string
是什么,但是用构造的string
替换每个引用的字符串应该这样做。
s=string("TO_DATE('") + DateFormat("%d/%m/%Y",Date) + string("','dd/MM/YYYY')");
答案 3 :(得分:2)
问题仅来自DateFormat的返回类型为char * - std :: strings通常可以与字符串文字连接而没有任何问题。
E.g。以下作品:
std::string a, b;
b = "foo";
a = "literal" + b + "literal";
但以下情况不起作用:
std::string a, b;
b = "foo";
a = "literal" + b.c_str() + "literal";
所需的唯一更改应该是将结果从DateFormat转换为std :: string。
s="TO_DATE('" + std::string(DateFormat("%d/%m/%Y",Date)) + "','dd/MM/YYYY')";
应该做的伎俩。
看到DateFormat返回字符串,连接literal + std :: string + literal应该没有问题。所以我很难过。
Amardeep注意到DateFormat实际上返回了一个char *,尽管签名暗示其他方面(很好的捕获)。我测试了它确实没有出现任何错误或警告,即使在gcc上使用-Wall和-Wextra进行编译,该函数的行为就好像它只是简单的char *。
因此,我的解决方案仍然可以用于最初的原因。 (并且将字符串文字与std :: string连接没有实际问题,问题只是字符串文字的char *。)
通过将sFormatted转换为std :: string,它可能是一个更简洁的解决方案来修复问题的根源 - DateFormat的错误返回类型。
return std::string(sFormatted);
答案 4 :(得分:1)
s="TO_DATE('" + DateFormat("%d/%m/%Y",Date) + "','dd/MM/YYYY')";
表示(对编译器)你要添加一个const char*
指向其他东西(可能是char*
?)从DateFormat
转换/转换,然后再添加到另一个const char*
指针。
尝试此操作以强制您的编译器为string
找到正确的operator+
重载:
s=string("TO_DATE('") + DateFormat("%d/%m/%Y",Date) + "','dd/MM/YYYY')";