Undefined Reference
-
Hi,
mache gerade seit langem mal wieder was mit C++ und bin echt verzweifelt :P.
Ich bekomme beim Erstellen einer Klasse immer eine undefined reference to `MatlabDevice::MatlabDevice()' um die Ohren geschmissen und weiß nicht wieso. Hier mal der Code:
#include "DeviceTest.hpp" DeviceTest::DeviceTest() { device = new MatlabDevice(); }Hier der Code von DeviceTest.hpp:
#ifndef DEVICETEST_HPP_ #define DEVICETEST_HPP_ #include "MatlabDevice.hpp" class DeviceTest { public: DeviceTest(); ~DeviceTest(); void basicTest(); private: MatlabDevice* device; }; #endifDie Klasse MatlabDevice ist auch eine stinknormale Klasse:
/* * MatlabDevice.hpp * * Created on: 29.05.2012 * Author: simon */ #ifndef __MATLAB_DEVICE_H #define __MATLAB_DEVICE_H #include "IDevice.hpp" #include <inttypes.h> #include <vector> #include <engine.h> #include "MatlabAPI.hpp" class MatlabDevice : public IDevice { public: MatlabDevice(); ~MatlabDevice(); bool connect(IBackend &backend); bool receiveProcessData(size_t deviceDomainId); bool sendProcessData(size_t MatlabDeviceDomainId); bool setupFinished(); // device specific methods std::vector<double> getSystemVoltages(); std::vector<uint64_t> getTimestamps(); std::vector<double> getJointAngles(std::vector<double> inJointOffsets); std::vector<double> getMotorAngles(std::vector<double> inMotorOffsets); std::vector<double> getMotorCurrents(); double calculateSpringLength(int jointIndex, double jointAngle, double motorAngle); std::vector<double> getSpringLengths(std::vector<double> jointAngles, std::vector<double> motorAngles); std::vector<double> getHallSensorData(std::vector<double> inHallOffsets); std::vector<double> getForceSensorData(); std::vector<double> getGyroData(); std::vector<double> getAccData(); void enableMotorControl(bool enable); void setMotorVoltages(const std::vector<double> &desiredMotorVoltages, const std::vector<double> &systemVoltages); private: MatlabAPI* matlab; bool simulationStarted; }; enum EnumMatlabDeviceDomainIds { ReadWriteDomain }; #endif /* DEVICE_HPP_ */Kann sich das jemand erklären? Habe ich irgendwas extrem einfaches übersehen oder liegt das am Compiler?! Ich sehe da keinen Fehler

-
Dir (bzw. dem Linker) fehlt die Implementation der Klasse. Du brauchst noch die zugehörige .cpp oder .lib.
-
device = new MatlabDevice;ohne Klammern
-
gastgast schrieb:
device = new MatlabDevice;ohne Klammern
Ohne new.
-
ohne Zuweisung :p
-
_matze schrieb:
Dir (bzw. dem Linker) fehlt die Implementation der Klasse. Du brauchst noch die zugehörige .cpp oder .lib.
Wieso klappt das dann bei allen anderen Klassen? Ich benutze Eclipse CDT. Beim Linker steht nur:
${COMMAND} ${FLAGS} ${OUTPUT_FLAG} ${OUTPUT_PREFIX}${OUTPUT} ${INPUTS}Normalerweise muss man da ja gar nichts einstellen?!
-
Ist möglicherweise vergessen worden, den Defaultkonstruktor von MatlabDevice irgendwo zu implementieren?
-
Oh ja, danke :). Ich dachte wenn der leer ist muss man den nicht implementieren wie in Java..
-
Warum deklarierst du ihn ueberhaupt, wenn er leer ist? Warum den Dtor?
-
Hm ja hab die standardmäßig so drin.. bin ich irgendwie so gewöhnt.
-
mikemodanoxxx schrieb:
bin ich irgendwie so gewöhnt.
Abgewöhnen
Nichts deklarieren, was du nicht brauchst.