LookAndFeel abstract error

I'm on Mac 10.7, and I just updated to Juce 2.1.7 via the Introjucer. I'm using a subclass of LookAndFeel called SynthLookAndFeel. I haven't touched this class in a while, but ever since I updated to 2.1.7 I'm getting a build error on the following line:

 

SynthLookAndFeel synthLookAndFeel;

 

Here's the error:

 


/Users/Joe/Developer/Primer/Source/Synth/SynthComponent.h:273:19: Field type 'SynthLookAndFeel' is an abstract class
/Users/Joe/Developer/Primer/Source/Synth/CustomControls.cpp:11:10: In file included from /Users/Joe/Developer/Primer/Builds/MacOSX/../../Source/Synth/CustomControls.cpp:11:
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h:303:22: Unimplemented pure virtual method 'areScrollbarButtonsVisible' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h:316:22: Unimplemented pure virtual method 'drawScrollbarButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h:350:36: Unimplemented pure virtual method 'getScrollbarEffect' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h:353:21: Unimplemented pure virtual method 'getMinimumScrollbarThumbSize' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ScrollBar.h:356:21: Unimplemented pure virtual method 'getDefaultScrollbarWidth' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h:366:22: Unimplemented pure virtual method 'drawButtonBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h:369:22: Unimplemented pure virtual method 'getTextButtonFont' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h:372:22: Unimplemented pure virtual method 'drawButtonText' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h:375:22: Unimplemented pure virtual method 'drawToggleButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h:377:22: Unimplemented pure virtual method 'changeToggleButtonWidthToFitText' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_Button.h:382:22: Unimplemented pure virtual method 'drawDrawableButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/buttons/juce_ImageButton.h:133:22: Unimplemented pure virtual method 'drawImageButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.h:591:22: Unimplemented pure virtual method 'fillTextEditorBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.h:592:22: Unimplemented pure virtual method 'drawTextEditorOutline' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TextEditor.h:594:33: Unimplemented pure virtual method 'createCaretComponent' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h:190:33: Unimplemented pure virtual method 'getDefaultFolderImage' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h:191:33: Unimplemented pure virtual method 'getDefaultDocumentFileImage' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h:193:34: Unimplemented pure virtual method 'createFileChooserHeaderText' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h:196:22: Unimplemented pure virtual method 'drawFileBrowserRow' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h:206:25: Unimplemented pure virtual method 'createFileBrowserGoUpButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h:208:22: Unimplemented pure virtual method 'layoutFileBrowserComponent' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.h:815:22: Unimplemented pure virtual method 'drawTreeviewPlusMinusBox' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.h:818:22: Unimplemented pure virtual method 'areLinesDrawnForTreeView' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TreeView.h:819:21: Unimplemented pure virtual method 'getTreeViewIndentSize' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/misc/juce_BubbleComponent.h:147:22: Unimplemented pure virtual method 'drawBubble' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h:428:30: Unimplemented pure virtual method 'createAlertWindow' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h:436:22: Unimplemented pure virtual method 'drawAlertBox' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h:438:21: Unimplemented pure virtual method 'getAlertBoxWindowFlags' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h:440:21: Unimplemented pure virtual method 'getAlertWindowButtonHeight' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h:442:22: Unimplemented pure virtual method 'getAlertWindowMessageFont' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_AlertWindow.h:443:22: Unimplemented pure virtual method 'getAlertWindowFont' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h:493:22: Unimplemented pure virtual method 'drawPopupMenuBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h:496:22: Unimplemented pure virtual method 'drawPopupMenuItem' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h:507:22: Unimplemented pure virtual method 'drawPopupMenuUpDownArrow' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h:518:21: Unimplemented pure virtual method 'getMenuWindowFlags' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h:524:21: Unimplemented pure virtual method 'getDefaultMenuBarHeight' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h:526:21: Unimplemented pure virtual method 'getMenuBarItemWidth' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h:528:22: Unimplemented pure virtual method 'getMenuBarFont' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/menus/juce_PopupMenu.h:530:22: Unimplemented pure virtual method 'drawMenuBarItem' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.h:344:22: Unimplemented pure virtual method 'drawComboBox' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_ComboBox.h:350:24: Unimplemented pure virtual method 'createComboBoxTextBox' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.h:260:22: Unimplemented pure virtual method 'drawLabel' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Label.h:261:22: Unimplemented pure virtual method 'getLabelFont' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h:774:22: Unimplemented pure virtual method 'drawLinearSlider' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h:798:21: Unimplemented pure virtual method 'getSliderThumbRadius' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h:807:25: Unimplemented pure virtual method 'createSliderButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h:808:24: Unimplemented pure virtual method 'createSliderTextBox' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h:810:36: Unimplemented pure virtual method 'getSliderEffect' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h:812:22: Unimplemented pure virtual method 'getSliderPopupFont' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Slider.h:813:21: Unimplemented pure virtual method 'getSliderPopupPlacement' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h:318:22: Unimplemented pure virtual method 'drawCornerResizer' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h:319:22: Unimplemented pure virtual method 'drawResizableFrame' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h:321:22: Unimplemented pure virtual method 'fillResizableWindowBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_ResizableWindow.h:322:22: Unimplemented pure virtual method 'drawResizableWindowBorder' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.h:234:22: Unimplemented pure virtual method 'drawDocumentWindowTitleBar' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.h:240:25: Unimplemented pure virtual method 'createDocumentWindowButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_DocumentWindow.h:242:22: Unimplemented pure virtual method 'positionDocumentWindowButtons' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.h:107:22: Unimplemented pure virtual method 'getTooltipSize' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_TooltipWindow.h:108:22: Unimplemented pure virtual method 'drawTooltip' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:304:21: Unimplemented pure virtual method 'getTabButtonSpaceAroundImage' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:305:21: Unimplemented pure virtual method 'getTabButtonOverlap' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:306:21: Unimplemented pure virtual method 'getTabButtonBestWidth' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:307:32: Unimplemented pure virtual method 'getTabButtonExtraComponentBounds' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:309:22: Unimplemented pure virtual method 'drawTabButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:310:22: Unimplemented pure virtual method 'drawTabButtonText' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:311:22: Unimplemented pure virtual method 'drawTabbedButtonBarBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:312:22: Unimplemented pure virtual method 'drawTabAreaBehindFrontButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:314:22: Unimplemented pure virtual method 'createTabButtonShape' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:315:22: Unimplemented pure virtual method 'fillTabButtonShape' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_TabbedButtonBar.h:317:25: Unimplemented pure virtual method 'createTabBarExtrasButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h:111:22: Unimplemented pure virtual method 'drawPropertyPanelSectionHeader' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h:112:22: Unimplemented pure virtual method 'drawPropertyComponentBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h:113:22: Unimplemented pure virtual method 'drawPropertyComponentLabel' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/properties/juce_PropertyComponent.h:114:32: Unimplemented pure virtual method 'getPropertyComponentContentPosition' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h:189:25: Unimplemented pure virtual method 'createFilenameComponentBrowseButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h:190:22: Unimplemented pure virtual method 'layoutFilenameComponent' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_GroupComponent.h:91:22: Unimplemented pure virtual method 'drawGroupComponentOutline' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h:375:22: Unimplemented pure virtual method 'drawTableHeaderBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h:377:22: Unimplemented pure virtual method 'drawTableHeaderColumn' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/windows/juce_CallOutBox.h:127:22: Unimplemented pure virtual method 'drawCallOutBoxBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h:276:22: Unimplemented pure virtual method 'paintToolbarBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h:278:25: Unimplemented pure virtual method 'createToolbarMissingItemsButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h:280:22: Unimplemented pure virtual method 'paintToolbarButtonBackground' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/widgets/juce_Toolbar.h:284:22: Unimplemented pure virtual method 'paintToolbarButtonLabel' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_ConcertinaPanel.h:102:22: Unimplemented pure virtual method 'drawConcertinaPanelHeader' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h:81:22: Unimplemented pure virtual method 'drawStretchableLayoutResizerBar' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h:50:22: Unimplemented pure virtual method 'drawKeymapChangeButton' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h:59:22: Unimplemented pure virtual method 'drawLevelMeter' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h:41:22: Unimplemented pure virtual method 'drawLasso' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h:195:18: Unimplemented pure virtual method 'drawSpinningWaitAnimation' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h:200:18: Unimplemented pure virtual method 'getTickShape' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h:202:18: Unimplemented pure virtual method 'getCrossShape' in 'SynthLookAndFeel'
/Users/Joe/Developer/Primer/JuceLibraryCode/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h:205:27: Unimplemented pure virtual method 'createDropShadowerForComponent' in 'SynthLookAndFeel'

I can post the SynthLookAndFeel class if you'd like, but again, this error was caused by the 2.1.7 update, with no code changes on my end. Is there something new going on with the LookAndFeel class in this most recent update that I need to compensate for?

This is probably due to the recent LookAndFeel changes.

My bad, should've looked there first. Thanks for pointing that out. I changed LookAndFeel to LookAndFeel_V2 and everything works fine.

Can an abstract error really count as a real error :)

Hello,

Novice here. I have quite a similar error so I decided to add it to this thread.

On the line:

        virtual void buttonClicked (Button*) = 0;

I get the error message:

Unimplemented pure virtual method...

I checked the documentation but I am not sure what I am doing wrong.

That’s not a method of LookAndFeel, it’s a method of Button::Listener. Pure virtual functions must be implemented by subclasses to make them concrete.

(edit) Just saw you asked it somewhere else, sorry for the noise.