3

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

// 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 declared或之外的任何内容Sum was not declared in this scope.

我正在尝试用 C++ 编写代码组织,感谢任何帮助。

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

4

2 回答 2

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”),尤其是在使用<...>语法时,因为包含路径肯定会包含系统库头文件。

于 2012-09-04T02:38:52.570 回答
0

您是否按照此处给出的说明进行操作?

自 0017 版起,用户创建的库位于默认草图目录的子目录中。例如,在 OSX 上,新目录是 ~/Documents/Arduino/libraries/。在 Windows 上,它将是 My Documents\Arduino\libraries。要添加您自己的库,请在库目录中使用您的库名称创建一个新目录。该文件夹应包含一个带有您的代码的 C 或 C++ 文件以及一个带有您的函数和变量声明的头文件。然后它将出现在 Sketch | Arduino IDE 中的 Import Library 菜单。

于 2012-09-04T02:19:04.480 回答