Ich weiß, ähnliche Frage wurde überall gepostet, aber alle, die ich mir angesehen habe, davon ausgehen, dass die Variable in einer Klasse existiert. Ich habe eine ähnliche Sache versucht, nur die Klasse Teil zu entfernen, aber immer noch die gleiche Fehlermeldung erhalten:undefined Verweis auf statische Variable, keine Klasse
TestController.cpp:(.text+0xd0): undefined reference to `vio::HORIZONTAL_MOTOR'
vio.h
#ifndef VIO_H
#define VIO_H
namespace vio
{
...
extern TransistorTuple HORIZONTAL_MOTOR;
extern TransistorTuple FRONT_MOTOR;
extern TransistorTuple BACK_MOTOR;
...
vio.cpp
...
void vio::initialize()
{
// Define variables
vio::TransistorTuple HORIZONTAL_MOTOR;
vio::TransistorTuple FRONT_MOTOR;
vio::TransistorTuple BACK_MOTOR;
...
}
TestController.cpp
...
void test::moveChair()
{
// Define variables
vio::TransistorTuple HORIZONTAL_MOTOR;
vio::TransistorTuple FRONT_MOTOR;
vio::TransistorTuple BACK_MOTOR;
...
}
Die Definition funktioniert gut in vio.cpp, aber wenn ich das gleiche in TestController.cpp mache, gibt es einen Fehler. Ich schließe vi.h in TestController ein.
Da dies offensichtlich einige eingebetteten Code ist, wäre der Compiler hilfreich (viele eingebettete Compiler saugen;)). Aber ... in vio.cpp sollten Sie die gleiche '' namespace vio {...} '' Anweisung haben und dann brauchen Sie das Präfix nicht für jede der Variablen. Vielleicht wird Ihr Compiler dann verstehen ... – BitTickler
Ich kompiliere mit cmake auf Linux. vio.cpp ist gut verlinkt, der andere weiß nicht, was passiert. – DSchana
Off topic ein wenig: Normalerweise ist es eine schlechte Idee, globale Variablen zu verwenden. Vielleicht willst du die ganze Sache überdenken. – BitTickler