【问题标题】:c++ static function unfoundc++静态函数未找到
【发布时间】:2010-06-24 14:48:15
【问题描述】:

我的课堂上有这个函数的定义。

.hpp 文件:

class SomeClass
{
public:

static string DoStuff(string s);

};

.cpp 文件:

#include "header.hpp"

string SomeClass::DoStuff(string s)
{
// do something
}

编译器说:

**error C2039: 'DoStuff' : is not a member of 'SomeClass'**

有人可以帮忙吗?

编辑: 实际违规代码

标题定义

  class DDateTime{  
public:
static string date2OracleDate(DATE Date);
}


string DDateTime::date2OracleDate(DATE Date)
{
    string s;
    s="TO_DATE('" + DDateTime::DateFormat("%d/%m/%Y",Date) + "','dd/MM/YYYY')";
    return s;
}

【问题讨论】:

  • 您是否尝试过编译那个确切的示例,或者您是否为我们简化了它?看起来它应该可以工作......
  • 您是否可以使用string 的两种不同定义?其中一个站点是否指定const(在参数或方法上)?
  • 你在类声明的末尾错过了;
  • @Tony:即使您的“实际违规代码”也编译得很好。您的问题出在其他地方,您没有提供足够的背景信息让任何人发现问题。
  • 同意,信息不足。除了缺少分号之外,字符串应该是什么?标准::字符串?如果是这样,标题应该指定命名空间,我希望你的任何标题中都没有 using 声明/指令,因为这是绝对禁止的。

标签: c++ static function


【解决方案1】:

通常,.cpp 文件必须包含匹配的 .h.hpp 文件。

这里是这样吗?

您还可能遇到命名空间问题(.cpp 文件中缺少命名空间或命名空间之外的静态方法定义,等等。)。

实际上,在我们有真正的破解代码之前很难回答。


此外,我不知道这是否是示例代码,但您似乎在头文件中使用了 using std::stringusing namespace std 之类的东西。

这是一个坏主意,因为它会污染包含您的标头的每个文件。如果有人想使用您的头文件但不想“使用”std,因为string 是其中一个类的名称,该怎么办?

【讨论】:

  • 标头包含在 cpp 中。它找到其他定义的函数......还有静态函数......
  • @Tony:请发布实际的破坏代码,因为很明显您发布的代码并不是真正给您带来问题的代码。
【解决方案2】:

您的 cpp 文件中是否包含头文件?

【讨论】:

    【解决方案3】:

    可能是命名空间问题?你可以有一个带有静态成员函数的 SomeNamespace::SomeClass 和一个在没有静态成员函数的外部命名空间中的 ::SomeClass。

    【讨论】:

      【解决方案4】:

      你错过了吗

      #include<string>
      

      在你的头文件中?

      【讨论】:

        【解决方案5】:

        您是否尝试从指向您的实例的双指针调用 DoStuff?示例:

        SomeClass **类; 类->DoStuff();

        如果是这样,请这样做:

        SomeClass **类; (*class)->DoStuf();

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-07-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-10
          相关资源
          最近更新 更多