错误:无法添加两个指针

时间:2010-06-24 10:10:17

标签: c++ pointers

它给出了关于这段代码的标题中的错误:

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;
}

5 个答案:

答案 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')";

应该做的伎俩。

编辑1

看到DateFormat返回字符串,连接literal + std :: string + literal应该没有问题。所以我很难过。

编辑2

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')";