【问题标题】:access methods from other c++ files来自其他 c++ 文件的访问方法
【发布时间】:2012-05-11 12:21:25
【问题描述】:

我已经为主要功能和菜单功能实现了客户、DVD、收据、类和 2 个文件,我包含了所有 .h 文件,但是当我使用菜单功能中的一个功能时,它不起作用,并说功能未定义。我想将其写入一个单独的 .cpp 文件,该文件称为 main,它是我的应用程序的驱动程序。

这是我的代码:

#ifndef CUSTOMER_H
#include "Customer.h"
#endif

#ifndef DVD_H
#include "DVD.h"
#endif

#ifndef MAIN_FUNC_H
#include "MainFunctions.h"
#endif

#ifndef MENU_FUNC_H
#include "MenuFunctions.h"
#endif

#ifndef RECEIPT_H
#include "Receipt.h"
#endif

using namespace std;

int main () {
    intro();

    return 0;
}

错误是:

错误 1 ​​错误 C2129:已声明静态函数 'void intro(void)' 但 未定义 c:\program files (x86)\microsoft visual studio 10.0\vc\include\xmemory 186 1 DVD_App

即使函数intro()MenuFunctions.h文件中定义,并在MenuFunctions.cpp中实现

注意:这两个文件 MenuFunctions 和 MainFunctions 中没有类,只是静态函数 我也试过没有包含警卫,但还是没用

【问题讨论】:

  • 从 intro() 声明中删除 static
  • 它起作用了 o_O 如果我删除了静电为什么它会起作用?

标签: c++ header include


【解决方案1】:

如果你用static 标记函数(注意 - 函数,而不是方法),它意味着编译单元(.cpp 文件)的“本地”。所以它需要在那里声明和定义,并且在其他 cpp 文件中不可见。因此,删除静态意味着可以跨编译单元访问该函数。

【讨论】:

    【解决方案2】:

    您没有编译 MenuFunctions.cpp,为了让编译器知道 intro() 的定义,它需要实现代码。检查你的makefile是否有,如果没有,在main()之前包含MenuFunctions.cpp,或者将MenuFunctions.cpp也指定给编译器。

    【讨论】:

      【解决方案3】:

      确保 MenuFunctions.cpp 文件有

      #include "MenuFunctions.h"
      

      在它的开头。该错误表明它已声明,但未定义。保护#include "MenuFunctions.h",防止双重包含。

      【讨论】:

      • 它包含在.cpp文件中并受到保护
      • 抱歉,但并不认为您实际上声明了函数 static,正如 Yossarian(投票赞成他的答案)指出的那样。只是以为您定义了函数并将它们称为静态...
      猜你喜欢
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 2012-04-03
      • 2012-09-12
      • 2012-03-15
      • 2011-11-19
      相关资源
      最近更新 更多