I am trying to create a PIDSubsystem for a lift joint (I need to repeat for more than one, but if I can get one fixed, the others will fall in line…)
I have created the following which generates a giant splat that makes no sense to me… I have no attachment to the shared_ptr, so if there is a more approriate way, I am all for it.
LiftJoint1.h
#pragma once
#include <frc/WPILib.h>
#include <frc/commands/PIDSubsystem.h>
#include <ctre/Phoenix.h>
class LiftJoint1 : public frc::PIDSubsystem
{
public:
std::shared_ptr<WPI_TalonSRX> LiftJoint1_Motor;
std::shared_ptr<frc::Potentiometer> LiftJoint1_Pot;
LiftJoint1();
void InitDefaultCommand() override;
double ReturnPIDInput();
void UsePIDOutput(double output);
void SetLiftJointSetpoint(double pos);
};
LiftJoint1.cpp
#include "subsystems/LiftJoint1.h"
#include "RobotMap.h"
LiftJoint1::LiftJoint1() : frc::PIDSubsystem("LiftJoint1", LIFT_JOINT_KP, LIFT_JOINT_KI, LIFT_JOINT_KD){
GetPIDController()->SetContinuous(false);
LiftJoint1_Pot = std::make_shared<frc::Potentiometer>(1); //this would be a variable from robotmap.h
LiftJoint1_Motor = std::make_shared<WPI_TalonSRX>(1); //this would be a variable from robotmap.h
SetSetpoint(LIFT_POS_STOW_1);
Enable();
}
void LiftJoint1::InitDefaultCommand(){
}
void LiftJoint1::UsePIDOutput(double output) {
LiftJoint1_Motor->PIDWrite(output);
}
double LiftJoint1::ReturnPIDInput() {
return LiftJoint1_Pot->PIDGet();
}
void LiftJoint1::SetLiftJointSetpoint(double pos) {
SetSetpoint(pos);
}
And the gigantic splat…
> Task :compileFrcUserProgramReleaseExecutableFrcUserProgramCpp
In file included from c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\arm-frc2019-linux-gnueabi\bits\c++allocator.h:33:0,
from c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\bits\allocator.h:46,
from c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\memory:63,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\cameraserver-cpp-2019.2.1-headers.zip_6d5c4a8bf55973d76d90eeb158bc5c66/cameraserver/CameraServer.h:12,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/WPILib.h:10,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\include/subsystems/LiftJoint1.h:3,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\cpp\subsystems\LiftJoint1.cpp:1:
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\ext\new_allocator.h: In instantiation of 'void __gnu_cxx::new_allocator<_Tp>::construct(_Up*, _Args&& ...) [with _Up = frc::Potentiometer; _Args = {int}; _Tp = frc::Potentiometer]':
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\bits\alloc_traits.h:455:4: required from 'static void std::allocator_traits<std::allocator<_Tp1> >::construct(std::allocator_traits<std::allocator<_Tp1> >::allocator_type&, _Up*, _Args&& ...) [with _Up = frc::Potentiometer; _Args = {int}; _Tp = frc::Potentiometer; std::allocator_traits<std::allocator<_Tp1> >::allocator_type = std::allocator<frc::Potentiometer>]'
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\bits\shared_ptr_base.h:520:39: required from 'std::_Sp_counted_ptr_inplace<_Tp, _Alloc, _Lp>::_Sp_counted_ptr_inplace(_Alloc, _Args&& ...) [with _Args = {int}; _Tp = frc::Potentiometer; _Alloc = std::allocator<frc::Potentiometer>; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]'
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\bits\shared_ptr_base.h:615:4: required from 'std::__shared_count<_Lp>::__shared_count(std::_Sp_make_shared_tag, _Tp*, const _Alloc&, _Args&& ...) [with _Tp = frc::Potentiometer; _Alloc = std::allocator<frc::Potentiometer>; _Args = {int}; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]'
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\bits\shared_ptr_base.h:1100:35: required from 'std::__shared_ptr<_Tp, _Lp>::__shared_ptr(std::_Sp_make_shared_tag, const _Alloc&, _Args&& ...) [with _Alloc = std::allocator<frc::Potentiometer>; _Args = {int}; _Tp = frc::Potentiometer; __gnu_cxx::_Lock_policy _Lp = (__gnu_cxx::_Lock_policy)2u]'
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\bits\shared_ptr.h:319:64: required from 'std::shared_ptr<_Tp>::shared_ptr(std::_Sp_make_shared_tag, const _Alloc&, _Args&& ...) [with _Alloc = std::allocator<frc::Potentiometer>; _Args = {int}; _Tp = frc::Potentiometer]'
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\bits\shared_ptr.h:619:14: required from 'std::shared_ptr<_Tp1> std::allocate_shared(const _Alloc&, _Args&& ...) [with _Tp = frc::Potentiometer; _Alloc = std::allocator<frc::Potentiometer>; _Args = {int}]'
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\bits\shared_ptr.h:635:39: required from 'std::shared_ptr<_Tp1> std::make_shared(_Args&& ...) [with _Tp = frc::Potentiometer; _Args = {int}]'
C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\cpp\subsystems\LiftJoint1.cpp:6:57: required from here
c:\users\public\frc2019\roborio\arm-frc2019-linux-gnueabi\usr\include\c++\6.3.0\ext\new_allocator.h:120:4: error: invalid new-expression of abstract class type 'frc::Potentiometer'
{ ::new((void *)__p) _Up(std::forward<_Args>(__args)...); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/AnalogPotentiometer.h:14:0,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/WPILib.h:21,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\include/subsystems/LiftJoint1.h:3,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\cpp\subsystems\LiftJoint1.cpp:1:
C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/interfaces/Potentiometer.h:17:7: note: because the following virtual functions are pure within 'frc::Potentiometer':
class Potentiometer : public PIDSource {
^~~~~~~~~~~~~
In file included from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/GyroBase.h:11:0,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/ADXRS450_Gyro.h:12,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/WPILib.h:16,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\include/subsystems/LiftJoint1.h:3,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\cpp\subsystems\LiftJoint1.cpp:1:
C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/PIDSource.h:33:18: note: virtual double frc::PIDSource::PIDGet()
virtual double PIDGet() = 0;
^~~~~~
In file included from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/AnalogPotentiometer.h:14:0,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/WPILib.h:21,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\include/subsystems/LiftJoint1.h:3,
from C:\Storage\FRC\2019\Code\TestRobot.Mk1\src\main\cpp\subsystems\LiftJoint1.cpp:1:
C:\Storage\FRC\2019\Code\TestRobot.Mk1\build\tmp\expandedArchives\wpilibc-cpp-2019.2.1-headers.zip_c5f7002a6c1dfda8aa2899e2594d01fe/frc/interfaces/Potentiometer.h:30:18: note: virtual double frc::Potentiometer::Get() const
virtual double Get() const = 0;
^~~