从类定义中的外部文件访问函数

时间:2012-09-04 02:17:39

标签: c++ arduino

我正在尝试从另一个文件中访问函数,以便在我的类定义中使用:

// math.cpp
int Sum(int a, int b){
  return (a + b);
}

// my_class.cpp
#include <math.cpp>
#include <my_class.h>

int ComputeSomething() {
  ...

  return ::Sum(num1, num2);
}

尽管我付出了最大的努力,但我无法让编译器吐出::Sum has not been declaredSum was not declared in this scope.之外的任何内容

我正试图用C ++包围我的代码组织,任何帮助表示赞赏。

值得注意的是,我正在为Arduino编程。

2 个答案:

答案 0 :(得分:1)

为了能够从用户定义的库访问函数,最好将该库分为.h(或.hpp)和.cpp文件。我知道你实际上已经这样做了,但为了找到解决方案,尝试了各种选项 - 其中包括.cpp文件。

尽管如此,为了确保事情按预期工作,函数和类的声明应该进入.h文件,受到类似

的保护。
#ifndef MY_H_FILE
#define MY_H_FILE

/* ..Declarations.. */

#endif

然后包含.h文件(我假设它名为 my.h ),使用

#include "my.h"    // path relative to build directory

#include <my.h>    // path relative to any of the include paths

后者只有在编译器以前已知的包含路径上找到 my.h 时才有效(例如,使用-I命令行指定的内容GCC中的选项)。如果给出的.h文件的路径相对于您正在构建的目录,则前者有效。

最后,不要使用可能与系统库混淆的文件名(例如“math.h”),特别是如果您使用<...>语法,因为包含路径肯定会包含系统库头文件。

答案 1 :(得分:0)

您是否按照here给出的说明进行了操作?

  

自版本0017起,用户创建的库将进入您的子目录   默认草图目录。例如,在OSX上,新目录会   是〜/ Documents / Arduino / libraries /。在Windows上,它将是我的   文档\ Arduino的\库。要添加自己的库,请创建一个新库   库目录中的目录,包含库的名称。   该文件夹应包含带有代码和标头的C或C ++文件   带有函数和变量声明的文件。它会出现   在草图中|在Arduino IDE中导入库菜单。