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++ ファイルと、関数と変数の宣言を含むヘッダー ファイルが含まれている必要があります。その後、スケッチに表示されます | Arduino IDE の [ライブラリ] メニューをインポートします。

于 2012-09-04T02:19:04.480 に答える