如何在数组中初始化此类?

时间:2018-01-04 21:15:46

标签: c++ arrays class juce

我试图创建一个类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)
};

1 个答案:

答案 0 :(得分:0)

  

复制FilePlayerGui类型的数组元素会调用已删除的构造函数

表示此行的某些变体位于FilePlayerGui

的声明中
FilePlayerGui(const FilePlayerGui&) = delete

表示无法复制FilePlayerGuihttps://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

  1. FilePointerGui* filePointerGui[2]将初始化为:
  2. MainComponent::MainComponent(Audio& audio_) : audio(audio_), filePointerGui({ &audio.getFilePlayer(0), &audio.getFilePlayer(1) })
    

    访问将按以下方式执行:

    *filePointerGui[0]
    

    Live Example

    1. reference_wrapper<FilePointerGui> filePointerGui[2]将初始化为:
    2. MainComponent::MainComponent(Audio& audio_) : audio(audio_), filePointerGui({ audio.getFilePlayer(0), audio.getFilePlayer(1) })
      

      访问将按以下方式执行:

      filePointerGui[0].get()
      

      Live Example

      这可能值得再次强调这是糟糕的代码,因为它试图超越语言并解决类设计的意图。但这是,所以你可以这样做。