|
|
|
![]() |
|
|||||||
|
||||||||
![]() |
|
|
Thread Tools | Rate Thread | Display Modes |
|
|
|
#1
|
||||
|
||||
|
Cannot allocate an object of type 'Command'
Guys,
I think I understand why this is throwing an error, but I am looking for the correct way to do this. In Brad Miller's last Robot Builder video on youtube he writes the following java code: Code:
autonomousCommand = (Command) autonomousModes->GetSelected(); C:/WindRiver/workspace/TestProject/Robot.cpp: In member function `virtual void Robot::AutonomousInit()': C:/WindRiver/workspace/TestProject/Robot.cpp:40: error: cannot allocate an object of type `Command' C:/WindRiver/workspace/TestProject/Robot.cpp:40: error: because the following virtual functions are abstract: C:/WindRiver/vxworks-6.3/target/h/WPILib/Commands/Command.h:79: error: virtual void Command::Initialize() C:/WindRiver/vxworks-6.3/target/h/WPILib/Commands/Command.h:84: error: virtual void Command::Execute() C:/WindRiver/vxworks-6.3/target/h/WPILib/Commands/Command.h:95: error: virtual bool Command::IsFinished() C:/WindRiver/vxworks-6.3/target/h/WPILib/Commands/Command.h:101: error: virtual void Command::End() C:/WindRiver/vxworks-6.3/target/h/WPILib/Commands/Command.h:114: error: virtual void Command::Interrupted() C:\WindRiver\vxworks-6.3\host\x86-win32\bin\make.exe: *** [CommandBasedRobotTemplate/Debug/Objects/TestProject/Robot.o] Error 1 The idea is to cast to the "Command" type in order to be able to set autonomousCommand equal to the output of a SelectableChooser object (which is set by the user clicking on the desired command on the Smartdashboard) - which is then the command that gets run in autonomous. Any thoughts? Thanks in advance. - Bryce P.S. Here's the complete code in Robot.cpp Code:
void Robot::RobotInit() {
RobotMap::init();
// BEGIN AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTRUCTORS
driveTrain = new DriveTrain();
elevator = new Elevator();
wrist = new Wrist();
claw = new Claw();
// END AUTOGENERATED CODE, SOURCE=ROBOTBUILDER ID=CONSTRUCTORS
// This MUST be here. If the OI creates Commands (which it very likely
// will), constructing it during the construction of CommandBase (from
// which commands extend), subsystems are not guaranteed to be
// yet. Thus, their requires() statements may grab null pointers. Bad
// news. Don't move it.
oi = new OI();
lw = LiveWindow::GetInstance();
// instantiate the command used for the autonomous period
autonomousModes = new SendableChooser();
autonomousModes->AddDefault("Deliver Cylinder", new DeliverCylinder());
autonomousModes->AddObject("Awesome Autonomous", new AutonomousCommand());
smartDashboard->PutData("Autonomous Modes", autonomousModes);
}
void Robot::AutonomousInit() {
autonomousCommand = (Command) autonomousModes->GetSelected();
if (autonomousCommand != NULL) autonomousCommand->Start();
}
Last edited by Bryscus : 09-01-2013 at 14:24. |
|
#2
|
||||
|
||||
|
Re: Cannot allocate an object of type 'Command'
You can't cast to Command class because it is an abstract class and therefore cannot have any instances. Try casting to CommandBase
|
|
#3
|
|||
|
|||
|
Re: Cannot allocate an object of type 'Command'
There's a new example of doing this in C++ at the bottom of this page:
http://wpilib.screenstepslive.com/s/...smartdashboard Brad |
|
#4
|
||||
|
||||
|
Re: Cannot allocate an object of type 'Command'
Thanks Brad. Just missing a *. I could have sworn that I tried that, but obviously not...
- Bryce |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|