3 Stimmen

Auf Funktionen aus externen Dateien im Klassen-Definition zugreifen

Ich versuche, Funktionen aus einer anderen Datei zu verwenden, um sie innerhalb meiner Klassendefinition zu verwenden:

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

// my_class.cpp
#include 
#include 

int ComputeSomething() {
  ...

  return ::Sum(num1, num2);
}

Trotz meiner besten Bemühungen kann ich den Compiler nicht dazu bringen, etwas anderes als ::Sum wurde nicht deklariert oder Sum wurde in diesem Bereich nicht deklariert auszugeben.

Ich versuche, mich mit der Codeorganisation in C++ vertraut zu machen, jede Hilfe wird geschätzt.

Es könnte erwähnenswert sein, dass ich für Arduino programmiere.

1voto

jogojapan Punkte 65439

Um auf Funktionen aus einer benutzerdefinierten Bibliothek zugreifen zu können, sollten Sie diese Bibliothek am besten in eine .h- (oder .hpp-) und eine .cpp-Datei aufteilen. Ich verstehe, dass Sie dies tatsächlich getan haben, aber verschiedene Optionen ausprobiert haben – darunter auch das Einbinden der .cpp-Datei – um eine Lösung zu finden.

Dennoch sollten die Deklarationen von Funktionen und Klassen zur Sicherstellung des erwarteten Verhaltens in die .h-Datei geschrieben werden, am besten geschützt durch etwas wie

#ifndef MY_H_FILE
#define MY_H_FILE

/* ..Deklarationen.. */

#endif

Dann, um die .h-Datei einzubinden (ich gehe davon aus, dass sie my.h heißt), verwenden Sie entweder

#include "my.h"    // Pfad relativ zum Build-Verzeichnis

oder

#include     // Pfad relativ zu einem der Include-Pfade

Letzteres funktioniert nur, wenn my.h auf einem zuvor dem Compiler bekannten Include-Pfad gefunden wird (z. B. was mit der -I Befehlszeilenoption in GCC angegeben wird). Ersteres funktioniert, wenn der Pfad zur .h-Datei relativ zum Verzeichnis ist, von dem aus Sie kompilieren.

Verwenden Sie schließlich keinen Dateinamen, der mit einer Systembibliothek verwechselt werden kann (wie z. B. "math.h"), insbesondere wenn Sie die <...>-Syntax verwenden, da der Include-Pfad definitiv die Headerdateien der Systembibliothek einschließen wird.

0voto

Rapptz Punkte 20107

Hast du den Anweisungen, die hier gegeben wurden, gefolgt?

Benutzererstellte Bibliotheken ab Version 0017 werden in einem Unterverzeichnis Ihres Standard-Skizzenverzeichnisses gespeichert. Zum Beispiel, auf OSX würde das neue Verzeichnis ~/Documents/Arduino/libraries/ sein. Unter Windows wäre es My Documents\Arduino\libraries. Um Ihre eigene Bibliothek hinzuzufügen, erstellen Sie ein neues Verzeichnis im Bibliotheksverzeichnis mit dem Namen Ihrer Bibliothek. Der Ordner sollte eine C- oder C++-Datei mit Ihrem Code und eine Headerdatei mit Ihren Funktions- und Variablendeklarationen enthalten. Danach wird es im Sketch | Bibliothek importieren Menü in der Arduino IDE erscheinen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X