我试图创建一个类filePlayerGui的数组,当我尝试在构造函数中初始化它时,它不会让我这样做
if (intent.getExtras() != null) {
//use getString here
}
filePlayerGui出现此错误"复制类型' FilePlayerGui'的数组元素调用已删除的构造函数"。我尝试在.cpp文件中初始化它,我在下面但是它告诉我我需要一个数组初始化器
class MainComponent : public Component,
public MenuBarModel
{
public:
//==============================================================================
/** Constructor */
MainComponent (Audio& audio_);
/** Destructor */
~MainComponent();
void resized() override;
//MenuBarEnums/Callbacks========================================================
enum Menus
{
FileMenu=0,
NumMenus
};
enum FileMenuItems
{
AudioPrefs = 1,
NumFileItems
};
StringArray getMenuBarNames() override;
PopupMenu getMenuForIndex (int topLevelMenuIndex, const String& menuName) override;
void menuItemSelected (int menuItemID, int topLevelMenuIndex) override;
private:
Audio& audio;
FilePlayerGui filePlayerGui[2] {audio.getFilePlayer(0), audio.getFilePlayer(1)};
//==============================================================================
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
};
答案 0 :(得分:0)
复制
FilePlayerGui
类型的数组元素会调用已删除的构造函数
表示此行的某些变体位于FilePlayerGui
:
FilePlayerGui(const FilePlayerGui&) = delete
表示无法复制FilePlayerGui
:https://en.cppreference.com/w/cpp/language/copy_constructor#Deleted_implicitly-declared_copy_constructor
有一些解决方法,但是你正在绕过FilePlayerGui
这个课程的作者。所以正确的答案应该停在这里。 FilePlayerGui
的任何使用都应通过audio
成员使用:audio.getFilePlayer(0)
或audio.getFilePlayer(1)
完成。 (如果这是MainComponent
的唯一成员,则很可能MainComponent
应被删除。)
如果你想知道如何做坏事,我会在任何代码审查中拒绝,你可以创建filePointerGui
:
FilePointerGui* filePointerGui[2]
将初始化为:MainComponent::MainComponent(Audio& audio_) : audio(audio_), filePointerGui({ &audio.getFilePlayer(0), &audio.getFilePlayer(1) })
访问将按以下方式执行:
*filePointerGui[0]
reference_wrapper<FilePointerGui> filePointerGui[2]
将初始化为:MainComponent::MainComponent(Audio& audio_) : audio(audio_), filePointerGui({ audio.getFilePlayer(0), audio.getFilePlayer(1) })
访问将按以下方式执行:
filePointerGui[0].get()
这可能值得再次强调这是糟糕的代码,因为它试图超越语言并解决类设计的意图。但这是c++,所以你可以这样做。